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


相关文章
|
8天前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
6天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
16天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
48 2
|
18天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
33 3
|
16天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
51 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
18天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
39 2
|
20天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
38 1
|
20天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
46 1
|
7月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
246 14
|
7月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)