机器之心合集
参与:魔王、一鸣
对于机器学习开发人员来说卡通人物,构建应用程序有多困难? 事实上,你只需要了解 Python 代码,剩下的事情都可以通过工具完成。 近日,Streamlit 联合创始人 Adrien Treuille 写了一篇文章,介绍了他开发的机器学习工具开发框架——Streamlit网页设计模板html代码,这是一个专门为机器学习工程师创建的免费开源应用程序构建框架。 该工具可以在您编写 Python 代码时实时更新您的应用程序。 目前,Streamlit 的 GitHub Star 量已超过 3,400,Medim 上的热度已达到 9,000+。
Streamlit网站:
GitHub地址:
使用 300 行 Python 代码编写一个语义搜索引擎,可以实时执行神经网络推理。
根据我的经验,每个重要的机器学习项目都是使用充满错误且难以维护的内部工具组合在一起的。 这些工具通常用 Jupyter Notebook 和 Flask 应用程序编写,部署困难,需要客户端-服务器架构(C/S 架构)进行推理,并且无法与 Tensorflow GPU 会话等机器学习组件很好地集成。
我第一次看到这样的工具是在卡内基梅隆大学,后来又在伯克利、Google X 和 Zoox。 这些工具最初只是小型 Jupyter 笔记本:传感器校准工具、模拟比较应用程序、激光雷达对齐应用程序、场景再现工具等。
当工具变得更加重要时,项目经理就会介入:流程和需求不断增加。 这些单独的项目变成了代码脚本,并变成了漫长的“维护噩梦”……
机器学习工程师创建应用程序的过程(临时)。
而当一个工具非常关键的时候,我们就会组建一个工具团队。 他们熟练地编写 Vue 和 React,他们的笔记本电脑上贴满了声明性框架贴纸。 他们的设计流程是这样的:
工具团队构建应用程序的流程(干净,从头开始)。
这简直太棒了! 但所有这些工具都需要新功能,例如每周都会上线的新功能。 尽管工具团队可能同时支持 10 多个项目,但他们会说:“我们将在两个月内更新您的工具。”
我们回到了自己构建工具的过程:部署 Flask 应用程序,编写 HTML、CSS 和 JavaScript,并尝试对从笔记本到样式表的所有内容进行版本控制。 我和我在 Google X 工作的朋友 Thiago Teixeira 开始思考:如果构建工具就像编写 Python 脚本一样简单会怎样?
我们希望机器学习工程师无需工具团队也能构建出优秀的应用程序。 这些内部工具应该自然出现,就像机器学习工作流程的副产品一样。 编写这样的工具感觉就像在 Jupyter 中训练神经网络或执行临时分析! 同时,我们还希望保留强大的应用程序框架的灵活性。 我们希望创造出让工程师引以为傲的出色工具。
我们想要的app构建流程如下:
Streamlit 应用程序构建过程。
我们与 Uber、Twitter、Stitch Fix、Dropbox 等公司的工程师一起花了一年时间创建 Streamlit吉祥物,这是一个面向机器学习工程师的免费开源应用程序框架。 对于任何原型来说,Streamlit 的核心原理都更简单、更纯粹。
Streamlit的核心原则如下:
1.拥抱Python
Streamlit 应用程序是一个完全自上而下的脚本,没有隐藏状态。 您可以使用函数调用来处理代码。 只要你会编写Python脚本,你就可以编写Streamlit应用程序。 例如,您可以使用以下代码写入屏幕:
import streamlit as stst.write('Hello, world!')
2. 将小部件视为变量
Streamlit 中没有回调! 每次交互都只是从上到下重新运行脚本。 这种方法使代码非常干净:
import streamlit as stx = st.slider('x') st.write(x, 'squared is', x * x)
Streamlit 交互式应用程序用 3 行代码编写。
3. 重用数据和计算
如果您想下载大量数据或执行复杂计算怎么办? 关键是在多次运行中安全地重用信息。 Streamlit 引入了缓存原语,它就像一个持久的默认不可更改的数据存储,确保 Streamlit 应用程序可以轻松、安全地重用信息。 例如,以下代码仅从Udacity自动驾驶项目()下载一次数据,您就可以获得一个简单快速的应用程序:
使用 st.cache 在 Streamlit 的多次运行中保存数据。 有关代码运行说明,请参阅:#gistcomment-3041475。
运行上面的 st.cache 示例的输出。
简而言之,Streamlit的工作流程如下:
每次用户交互都需要从头开始运行整个脚本。 Streamlit 根据小部件状态为每个变量分配最新值。 缓存可确保 Streamlit 重用数据和计算。
如下所示:
用户事件触发 Streamlit 从头开始重新运行脚本。 在运行之间仅保留缓存。
如果你有兴趣,现在就可以尝试一下! 只需运行以下几行:
Web 浏览器将自动打开并重定向到本机 Streamlit 应用程序。 如果浏览器窗口没有出现,只需单击链接即可。
这些想法很简单,但很有效,并且使用 Streamlit 不会阻止您创建丰富且有用的应用程序。 当我在 Zoox 和 Google X 工作时,我看到自动驾驶汽车项目成长为需要搜索和理解的千兆字节的视觉数据,包括在图像数据上运行模型来比较性能。 我看到的每个自动驾驶汽车项目都有一个完整的团队致力于开发工具。
在 Streamlit 中构建此类工具非常简单。 以下 Streamlit 演示对整个 Udacity 自动驾驶汽车照片数据集执行语义搜索,可视化人工注释的地面实况标签,并在应用程序中实时运行完整的神经网络 (YOLO)。
这个 300 行 Streamlit 演示将语义视觉搜索与交互式神经网络推理相结合。
整个应用只有300行Python代码,其中大部分是机器学习代码。 事实上,整个应用程序中只有 23 个 Streamlit 调用。 你可以试试这个:
当我们与机器学习团队合作开展他们的项目时,我们逐渐意识到这些简单的想法有许多重要的好处:
Streamlit 应用程序是一个纯 Python 文件。 您可以使用您最喜欢的编辑器和调试器。
在使用 Streamlit 构建应用程序时,我喜欢使用 VSCode 编辑器(左)和 Chrome(右)。
纯Python代码可以与Git等源代码控制软件无缝连接,包括提交、拉取请求、问题和评论。 由于 Streamlit 的底层语言是 Python,因此您可以免费利用这些协作工具的优势。
Streamlit 应用程序是一个 Python 脚本,因此您可以使用 Git 轻松执行版本控制。
Streamlit 提供了实时模式编程环境。 当 Streamlit 检测到源文件发生更改时,只需单击始终重新运行。
单击“始终重新运行”以确保实时编程。
缓存简化了计算过程。 一系列缓存功能自动创建高效的计算过程! 您可以尝试以下代码:
Streamlit 中的简单计算过程。 运行上面的代码,参见描述:#gistcomment-3041436。
基本上,该过程涉及从加载元数据到创建摘要的步骤(load_metadata→create_summary)。 每次运行脚本时,Streamlit 只需要重新计算进程的一个子集。
为了保证应用程序的可执行性,Streamlit只计算更新UI所需的部分。
Streamlit 适用于 GPU。 Streamlit 提供对机器级原语(例如 TensorFlow、PyTorch)的直接访问,并对这些库进行了补充。 例如,在下面的演示中,Streamlit的缓存存储了整个NVIDIA PGGAN。 此方法允许应用程序在用户更新左侧滑块时执行近乎即时的推理。
这个Streamlit应用程序使用TL-GAN来演示NVIDIA PGGAN的效果。
Streamlit 是一个免费的开源库,而不是专有的 Web 应用程序。 您可以在本地部署 Streamlit 应用程序,无需提前联系我们。 您甚至可以在笔记本电脑上本地运行 Streamlit,而无需连接到互联网。 此外,现有项目也可以逐步使用 Streamlit。
增量使用 Streamlit 的几种方法。
以上只是Streamlit功能的冰山一角。 最令人兴奋的是,这些原语可以轻松地形成复杂的应用程序,但它们看起来像简单的脚本。 这涉及到架构的工作原理和功能,本文不予讨论。
Streamlit 组件图。
我们很高兴与社区分享 Streamlit,并希望它能帮助每个人轻松地将 Python 脚本转换为美观实用的机器学习应用程序。
原文链接:
参考:
[1] J. Redmon 和 A. Farhadi网页设计模板html代码,YOLOv3:增量改进 (2018),arXiv。
[2] T. Karras、T. Aila、S. Laine 和 J. Lehtinen,渐进式增长 GAN 以提高质量、稳定性和变化 (2018),ICLR。
[3] S.guan,使用新颖的 TL-GAN 模型控制图像合成和编辑(2018),Insight 数据科学博客。
- 本文固定链接: https://wen.nuanque.com/wangye/16385.html
- 转载请注明: nuanquewen 于 吉祥物设计/卡通ip设计/卡通人物设计/卡通形象设计/表情包设计 发表
- 文章或作品为作者独立观点不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。本文之内容为用户主动投稿和用户分享产生,如发现内容涉嫌抄袭侵权,请联系在线客服举报,一经查实,本站将立刻删除。本站转载之内容为资源共享、学习交流之目的,请勿使用于商业用途。