快看,好神奇!把Python脚本变成漂亮的机器学习工具

简介: 快看,好神奇!把Python脚本变成漂亮的机器学习工具

本文介绍一个为ML工程师构建的应用程序框架:Streamlit


89.gif


用300行Python代码编写一个具有实时神经网络推理的语义搜索引擎。


根据我的经验,每一个重要的机器学习项目最终都是由充满bug和不可维护的内部工具拼凑起来的。这些工具——通常是jupiter notebook和Flask应用的补丁——很难部署,需要对客户端-服务器架构进行推理,并且不能很好地与像Tensorflow GPU会话这样的机器学习结构集成。


我首先在卡耐基梅隆大学(Carnegie Mellon)看到了这一点,然后是Ber k eley,谷歌x,最后是在Zoox建造自主机器人的时候。这些工具通常是作为小jupiter笔记本诞生的:传感器校准工具、模拟比较应用程序、LIDAR校准应用程序、场景回放工具等等。


随着工具越来越重要,项目经理介入。发芽过程。用花装饰的需求。这些单独的项目孕育成脚本,并发展成冗长的维护噩梦。


98.png

机器学习工程师的特别应用程序构建流程。


当一个工具变得至关重要时,我们召集工具团队。他们写出了流畅的Vue和React。他们在笔记本电脑上贴了一些关于声明性框架的贴纸。他们有一个设计过程:

78.png


工具团队的干净的应用程序构建流程。


这是可怕的。但这些工具都需要新特性,比如每周都需要。工具团队支持其他十个项目。他们会说:“我们会在两个月后再次更新您的工具。”


所以我们又开始构建自己的工具,部署弗拉克应用程序,编写HTML、CSS和JavaScript,试图控制从笔记本到样式表的所有内容。所以我的老朋友,Thiago Teixeira,和我开始思考以下问题:如果我们可以使构建工具像编写Python脚本一样简单会怎样?


我们希望机器学习工程师能够在不需要工具团队的情况下创建漂亮的应用程序。这些内部工具应该是ML工作流程的自然副产品。编写这样的工具应该感觉就像在jupiter中训练一个神经网络或执行一个特别的分析!与此同时,我们希望保留强大应用框架的所有灵活性。我们想要创造漂亮的、高性能的工具,让工程师们可以炫耀一下。基本上,我们想要的是:


52.png

Streamlit应用程序构建流程。


我们有一个很棒的测试社区,包括来自Uber、Twitter、Stitch Fix和Dropbox的工程师,我们花了一年的时间创建了Streamlit,这是一个为ML工程师提供的完全免费和开源的应用框架。对于每个原型,Streamlit的核心原则变得更加简单和纯粹。它们是:


1:拥抱Python脚本。

流光应用程序实际上只是从上到下运行的脚本。没有隐藏状态。您可以通过函数调用对代码进行分解。如果你知道如何编写Python脚本,你就可以编写Streamlit应用程序。例如,这是你如何写到屏幕:

import streamlit as st
st.write('Hello, world!')

25.png

2: 将小部件视为变量。

在Streamlit中没有回调!每个交互都是从上到下重新运行脚本。这种方法可以产生真正干净的代码:

import streamlit as st
x = st.slider('x')
st.write(x, 'squared is', x * x)

14.png

三行代码的交互式Streamlit应用程序。


3:重用数据和计算

如果您下载了大量数据或执行复杂的计算,该怎么办?关键是跨运行安全地重用信息。Streamlit引入了一个缓存原语,它的行为就像一个持久的、默认不变的数据存储,可以让Streamlit应用程序安全地、轻松地重用信息。例如,这段代码只从Udacity自动驾驶汽车项目下载数据一次,产生一个简单、快速的应用程序:

使用st.cache跨Streamlit运行持久化数据。要运行此代码,请遵循以下说明。


41.png


上面运行st.cache示例的输出。

简而言之,Streamlit的工作原理是这样的:


或者在图片中:


02.png


用户事件触发Streamlit从头开始重新运行脚本。只有缓存在运行期间保持不变。

如果这听起来很有趣,你现在就可以试试!只需运行:

$ pip install --upgrade streamlit
$ streamlit hello You can now view your Streamlit app in your browser. Local URL: http://localhost:8501
Network URL: http://10.0.1.29:8501

这将自动弹出一个指向本地Streamlit应用程序的web浏览器。如果没有,只需点击链接。

20.png



要查看更多类似此分形动画的示例,请从命令行运行streamlit hello。


好的。你玩完分形了吗?这些都很迷人。


这些简单的想法并不妨碍你用Streamlit创建非常丰富和有用的应用程序。在Zoox和谷歌X工作期间,我目睹了自动驾驶汽车项目膨胀成千兆字节的视觉数据,这些数据需要搜索和理解,包括在图像上运行模型以比较性能。我看过的每个自动驾驶汽车项目最终都有整个团队在开发这个工具。


在Streamlit中构建这样一个工具很容易。这个Streamlit演示可以让您在整个Udacity自动驾驶汽车照片数据集上执行语义搜索,可视化人类注释的地面真实标签,并在应用程序[1]内实时运行一个完整的神经网络(YOLO)。

30.png



这个300行Streamlit演示结合了语义视觉搜索和交互式神经网络推理。

整个应用程序是一个完全独立的300行Python脚本,其中大部分是机器学习代码。事实上,整个应用程序中只有23个Streamlit调用。你现在就可以自己运行它!


$ pip install --upgrade streamlit opencv-python
$ streamlit run
https://raw.githubusercontent.com/streamlit/demo-self-driving/master/app.py

当我们与机器学习团队在他们自己的项目上合作时,我们意识到这些简单的想法会产生一些重要的好处:


流光应用程序是纯Python文件。因此,您可以使用您最喜欢的编辑器和调试器与Streamlit。


。36.png


我最喜欢的Streamlit应用的布局是在左边是VSCode,右边是Chrome。


纯Python脚本可以与Git和其他源代码控制软件无缝合作,包括提交、pull请求、问题和注释。因为Streamlit的底层语言是纯Python,所以您可以免费获得这些惊人协作工具的所有好处🎉。


9+.png


因为Streamlit应用程序只是Python脚本,你可以很容易地用Git控制它们的版本。


Streamlit提供了一个即时模式的实时编码环境。当Streamlit检测到源文件更改时,只需单击Always rerun。


+9.png


点击“Always rerun”以启用实时编码。


缓存简化了计算管道的设置。令人惊讶的是,链接缓存函数会自动创建高效的计算管道!看看这段改编自Udacity演示的代码:

Streamlit中的一个简单的计算管道。要运行此代码,请遵循以下说明。


基本上,管道是load_metadata→create_summary。每次运行脚本时,Streamlit只重新计算获得正确答案所需的管道子集。太酷了!


+6.png


为了提高应用的性能,Streamlit只重新计算更新UI所需的内容。

x

Streamlit是为gpu而建的。Streamlit允许直接访问像TensorFlow和PyTorch这样的机器级原语,并补充了这些库。例如,在这个演示中,Streamlit的缓存存储了整个NVIDIA名人面孔GAN[2]。当用户更新滑块时,这种方法支持几乎瞬时的推断。


+3.png


这个Streamlit应用程序使用关少波的TL-GAN[3]演示了NVIDIA名人脸GAN[2]模型。


Streamlit是一个免费和开源的库,而不是一个专有的网络应用程序。您可以在prem上提供Streamlit应用程序,而无需联系我们。你甚至可以在笔记本电脑上本地运行Streamlit而不需要连接互联网!此外,现有的项目可以增量地采用Streamlit。


![image.png](https://ucc.alicdn.com/images/user-upload-01/img_convert/dd1faf17c58bfb3fa03910dd307c998e.png#align=left&display=inline&height=537&margin=[object Object]&name=image.png&originHeight=537&originWidth=968&size=168531&status=done&style=none&width=968)


有几种方法逐步采用Streamlit。(图标由fullvector / Freepik提供。)


这仅仅是Streamlit功能的冰山一角。Streamlit最令人兴奋的一个方面是如何将这些原语轻松地组合成看起来像脚本的复杂应用程序。关于我们的架构是如何工作的,以及我们计划的特性,还有很多我们可以说的,但是我们会把这些留到以后的文章中。


3+.png


Streamlit组件的框图。更多的很快!

我们很高兴今天终于能与社区分享Streamlit,并看看你们都用它构建了什么。我们希望您会发现将您的Python脚本转换为漂亮的ML应用程序既简单又令人愉快。


参考:


[1] J. Redmon and A. Farhadi, _YOLOv3: An Incremental Improvement _(2018), arXiv.


[2] T. Karras, T. Aila, S. Laine, and J. Lehtinen, _Progressive Growing of GANs for Improved Quality, Stability, and Variation _(2018), ICLR.


[3] S. Guan, _Controlled image synthesis and editing using a novel TL-GAN model _(2018), Insight Data Science Blog.


相关文章
|
22天前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
7天前
|
数据采集 存储 监控
21个Python脚本自动执行日常任务(2)
21个Python脚本自动执行日常任务(2)
37 7
21个Python脚本自动执行日常任务(2)
|
10天前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
63 7
|
15天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
24 7
|
19天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
25天前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
107 4
|
25天前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
27天前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
28天前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
1月前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
61 2

热门文章

最新文章