快看,好神奇!把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.


相关文章
|
4天前
|
网络协议 Linux Python
Python脚本配置Centos静态ip地址
这是一个Python脚本,用于自动化配置CentOS系统的静态IP地址。脚本创建或修改文件,填写接口名(如ens33)、IP地址、子网掩码、网关和DNS。运行时需替换变量值并使用`sudo`以管理员权限执行。完成配置后,它会重启网络服务。注意,用户应根据实际网络环境调整参数。
Python脚本配置Centos静态ip地址
|
2天前
|
SQL API Python
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
19 8
|
1天前
|
网络协议 安全 Shell
`nmap`是一个开源的网络扫描工具,用于发现网络上的设备和服务。Python的`python-nmap`库允许我们在Python脚本中直接使用`nmap`的功能。
`nmap`是一个开源的网络扫描工具,用于发现网络上的设备和服务。Python的`python-nmap`库允许我们在Python脚本中直接使用`nmap`的功能。
23 7
|
6天前
|
机器学习/深度学习 监控 算法
Python数据分析与机器学习在金融风控中的应用
Python数据分析与机器学习在金融风控中的应用
31 12
|
5天前
|
数据采集 存储 监控
python 10个自动化脚本
【7月更文挑战第10天】
16 3
|
7天前
|
机器学习/深度学习 数据采集 搜索推荐
Python数据分析与机器学习在电子商务推荐系统中的应用
Python数据分析与机器学习在电子商务推荐系统中的应用
24 5
|
8天前
|
数据采集 数据处理 数据安全/隐私保护
Python的自动化脚本可以完成哪些任务?
【7月更文挑战第7天】Python的自动化脚本可以完成哪些任务?
19 3
|
6天前
|
运维 Python Windows
如何通过Python脚本查找并终止占用指定端口的进程
在日常的开发和运维过程中,某些端口被意外占用是一个常见的问题。这种情况可能导致服务无法启动或冲突。本文将介绍如何通过Python脚本查找并终止占用指定端口的进程,以确保系统的正常运行。
|
7天前
|
机器学习/深度学习 算法 Python
【Python】已完美解决:机器学习填补数值型缺失值时报错)TypeError: init() got an unexpected keyword argument ‘axis’,
【Python】已完美解决:机器学习填补数值型缺失值时报错)TypeError: init() got an unexpected keyword argument ‘axis’,
12 1
|
1天前
|
数据可视化 Python
时间序列分析是一种统计方法,用于分析随时间变化的数据序列。在金融、经济学、气象学等领域,时间序列分析被广泛用于预测未来趋势、检测异常值、理解周期性模式等。在Python中,`statsmodels`模块是一个强大的工具,用于执行各种时间序列分析任务。
时间序列分析是一种统计方法,用于分析随时间变化的数据序列。在金融、经济学、气象学等领域,时间序列分析被广泛用于预测未来趋势、检测异常值、理解周期性模式等。在Python中,`statsmodels`模块是一个强大的工具,用于执行各种时间序列分析任务。
7 0