快看,好神奇!把Python脚本变成漂亮的机器学习工具
Posted 程序员石磊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快看,好神奇!把Python脚本变成漂亮的机器学习工具相关的知识,希望对你有一定的参考价值。
本文介绍一个为ML工程师构建的应用程序框架:Streamlit
用300行Python代码编写一个具有实时神经网络推理的语义搜索引擎。
根据我的经验,每一个重要的机器学习项目最终都是由充满bug和不可维护的内部工具拼凑起来的。这些工具——通常是jupiter notebook和Flask应用的补丁——很难部署,需要对客户端-服务器架构进行推理,并且不能很好地与像Tensorflow GPU会话这样的机器学习结构集成。
我首先在卡耐基梅隆大学(Carnegie Mellon)看到了这一点,然后是Ber k eley,谷歌x,最后是在Zoox建造自主机器人的时候。这些工具通常是作为小jupiter笔记本诞生的:传感器校准工具、模拟比较应用程序、LIDAR校准应用程序、场景回放工具等等。
随着工具越来越重要,项目经理介入。发芽过程。用花装饰的需求。这些单独的项目孕育成脚本,并发展成冗长的维护噩梦。
机器学习工程师的特别应用程序构建流程。
当一个工具变得至关重要时,我们召集工具团队。他们写出了流畅的Vue和React。他们在笔记本电脑上贴了一些关于声明性框架的贴纸。他们有一个设计过程:
工具团队的干净的应用程序构建流程。
这是可怕的。但这些工具都需要新特性,比如每周都需要。工具团队支持其他十个项目。他们会说:“我们会在两个月后再次更新您的工具。”
所以我们又开始构建自己的工具,部署弗拉克应用程序,编写html、CSS和javascript,试图控制从笔记本到样式表的所有内容。所以我的老朋友,Thiago Teixeira,和我开始思考以下问题:如果我们可以使构建工具像编写Python脚本一样简单会怎样?
我们希望机器学习工程师能够在不需要工具团队的情况下创建漂亮的应用程序。这些内部工具应该是ML工作流程的自然副产品。编写这样的工具应该感觉就像在jupiter中训练一个神经网络或执行一个特别的分析!与此同时,我们希望保留强大应用框架的所有灵活性。我们想要创造漂亮的、高性能的工具,让工程师们可以炫耀一下。基本上,我们想要的是:
Streamlit应用程序构建流程。
我们有一个很棒的测试社区,包括来自Uber、Twitter、Stitch Fix和Dropbox的工程师,我们花了一年的时间创建了Streamlit,这是一个为ML工程师提供的完全免费和开源的应用框架。对于每个原型,Streamlit的核心原则变得更加简单和纯粹。它们是:
1:拥抱Python脚本。
流光应用程序实际上只是从上到下运行的脚本。没有隐藏状态。您可以通过函数调用对代码进行分解。如果你知道如何编写Python脚本,你就可以编写Streamlit应用程序。例如,这是你如何写到屏幕:
import streamlit as st
st.write('Hello, world!')
2: 将小部件视为变量。
在Streamlit中没有回调!每个交互都是从上到下重新运行脚本。这种方法可以产生真正干净的代码:
import streamlit as st
x = st.slider('x')
st.write(x, 'squared is', x * x)
三行代码的交互式Streamlit应用程序。
3:重用数据和计算
如果您下载了大量数据或执行复杂的计算,该怎么办?关键是跨运行安全地重用信息。Streamlit引入了一个缓存原语,它的行为就像一个持久的、默认不变的数据存储,可以让Streamlit应用程序安全地、轻松地重用信息。例如,这段代码只从Udacity自动驾驶汽车项目下载数据一次,产生一个简单、快速的应用程序:
使用st.cache跨Streamlit运行持久化数据。要运行此代码,请遵循以下说明。
上面运行st.cache示例的输出。
简而言之,Streamlit的工作原理是这样的:
或者在图片中:
用户事件触发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浏览器。如果没有,只需点击链接。
要查看更多类似此分形动画的示例,请从命令行运行streamlit hello。
好的。你玩完分形了吗?这些都很迷人。
这些简单的想法并不妨碍你用Streamlit创建非常丰富和有用的应用程序。在Zoox和谷歌X工作期间,我目睹了自动驾驶汽车项目膨胀成千兆字节的视觉数据,这些数据需要搜索和理解,包括在图像上运行模型以比较性能。我看过的每个自动驾驶汽车项目最终都有整个团队在开发这个工具。
在Streamlit中构建这样一个工具很容易。这个Streamlit演示可以让您在整个Udacity自动驾驶汽车照片数据集上执行语义搜索,可视化人类注释的地面真实标签,并在应用程序[1]内实时运行一个完整的神经网络(YOLO)。
这个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。
我最喜欢的Streamlit应用的布局是在左边是VSCode,右边是Chrome。
纯Python脚本可以与Git和其他源代码控制软件无缝合作,包括提交、pull请求、问题和注释。因为Streamlit的底层语言是纯Python,所以您可以免费获得这些惊人协作工具的所有好处🎉。
因为Streamlit应用程序只是Python脚本,你可以很容易地用Git控制它们的版本。
Streamlit提供了一个即时模式的实时编码环境。当Streamlit检测到源文件更改时,只需单击Always rerun。
点击“Always rerun”以启用实时编码。
缓存简化了计算管道的设置。令人惊讶的是,链接缓存函数会自动创建高效的计算管道!看看这段改编自Udacity演示的代码:
Streamlit中的一个简单的计算管道。要运行此代码,请遵循以下说明。
基本上,管道是load_metadata→create_summary。每次运行脚本时,Streamlit只重新计算获得正确答案所需的管道子集。太酷了!
为了提高应用的性能,Streamlit只重新计算更新UI所需的内容。
x
Streamlit是为gpu而建的。Streamlit允许直接访问像TensorFlow和PyTorch这样的机器级原语,并补充了这些库。例如,在这个演示中,Streamlit的缓存存储了整个NVIDIA名人面孔GAN[2]。当用户更新滑块时,这种方法支持几乎瞬时的推断。
这个Streamlit应用程序使用关少波的TL-GAN[3]演示了NVIDIA名人脸GAN[2]模型。
Streamlit是一个免费和开源的库,而不是一个专有的网络应用程序。您可以在prem上提供Streamlit应用程序,而无需联系我们。你甚至可以在笔记本电脑上本地运行Streamlit而不需要连接互联网!此外,现有的项目可以增量地采用Streamlit。
![image.png](https://img-blog.csdnimg.cn/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最令人兴奋的一个方面是如何将这些原语轻松地组合成看起来像脚本的复杂应用程序。关于我们的架构是如何工作的,以及我们计划的特性,还有很多我们可以说的,但是我们会把这些留到以后的文章中。
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.
以上是关于快看,好神奇!把Python脚本变成漂亮的机器学习工具的主要内容,如果未能解决你的问题,请参考以下文章