强大的项目-秒变 Python 脚本为 ML 工具

简介: 强大的项目-秒变 Python 脚本为 ML 工具

痛点


以我的经验来看,每一个不平凡的机器学习项目最终都会使用一个错漏百出的难以维护的内部工具进行缝合。而这些工具(通常是 Jupyter Notebook 或者 Flask App)往往都难以部署,通常需要对客户端和服务器架构进行整合,而且无法与 TesorFlow GPU 等机器学习框架进行很好的结合。


这些问题,我在卡内基-梅隆大学、伯克利、谷歌 X 和后来的 Zoox 构建自动化机器人时就发现了。这些工具通常都产生于 Jupyter Notebook 笔记本当中,例如:传感器校准工具、模型比较程序、LIDAR 校准程序和场景重播工具等等。


接下来慢慢随着项目的变迁,产品经理开始介入,一些独立的项目开始孕育成脚本,并逐渐成为了繁琐的难以维护的项目。

image.png

而当工具变得越来越重要时,就产生了工具团队,他们书写 Vue 或 React,并有一套自身的设计流程

image.png

现在看起来很棒!但是这些工具都是需要新功能的,比如每周一次更新。可是工具团队可能在同时支撑10个项目,他们也许会告诉你:“我们会在两个月内完成这个工具的更新。”


所以我们不得不再次回到自己构建工具的道路上,部署 Flask 程序,编写 HTML、CSS 和 JavaScript 代码,以及尝试对所有项目代码进行版本控制。所以我的朋友和我开始思考:如果我们能够使得构建工具像编写 Python 脚本那样容易,那该有多好?


我们的愿景是希望机器学习工程师在无需工具团队的情况下就能够创建出精美的工具应用程序。这些内部工具应该作为 ML 工作流程的自然产物出现,编写此类工具应该就像在 Jupyter Noebook 中训练神经网络一样简单。同时我们还希望保留功能强大的应用程序框架的灵活性,我们想要创建出工程师可以炫耀的,漂亮的,高性能的工具。基于以上,我们设想的流程如下:

image.png

现在我们已经拥有了一个了不起的 Beta 社区,包括了来自 Uber、Twitter、Stitch Fix 和 Dropbox 等知名企业的工程师。我们花费了一年的时间,为 Stream ML 创建了一个完全免费开源的应用程序框架 Streamlit。对于每个原型,Streamlit 的核心原理都很简单。


Streamlit 核心


拥抱 Python 脚本

Streamlit 应用程序实际上就是从上到下运行的脚本,它没有任何的隐藏状态,你也可以通过函数调用来分解代码。如果你知道如何编写 Python 脚本,那么你就可以轻松的编写 Streamlit 程序。例如:

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

image.png


视组件为变量

在 Streamlit 中是没有回调函数的,每一次交互都只是简单的从上至下运行脚本,这种方式可以产生非常干净的代码


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

image.png


重用数据和计算

如果你需要大量的数据或需要复杂的计算怎么办?其关键就是跨运行安全的重用信息。Streamlit 引入了一种缓存机制,可以让 Streamlit 应用程序安全轻松的重用信息。比如下面的代码仅从 Udacity 自动驾驶项目下载一次数据,从而产生一个简单快速的应用程序

import streamlit as st
import pandas as pd
# Reuse this data across runs!
read_and_cache_csv = st.cache(pd.read_csv)
BUCKET = "https://streamlit-self-driving.s3-us-west-2.amazonaws.com/"
data = read_and_cache_csv(BUCKET + "labels.csv.gz", nrows=1000)
desired_label = st.selectbox('Filter to:', ['car', 'truck'])
st.write(data[data.label == desired_label])

image.png

简而言之,Streamlit 的工作流程如下:

1. 对于每个用户的交互行为,整个脚本都是从头开始执行的

2. 在给定组件状态的情况下,为每个变量分配一个新值

3. 缓存允许 Streamlit 跳过冗余的数据获取和计算

image.png


开始使用


如果这些听起来很有趣,那么下面就可以立即尝试下了


$ 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 程序,如果没有,那么需要手动输入。

image.png

OK,你从模型的游戏中回来了吗,这些可能会令人着迷。

在 Streamlit 中构建这样的工具是非常容易的。在这个演示 Streamlit 程序中,你可以在整个 Udacity 无人驾驶汽车照片数据集中执行语义搜索,可视化带有人工标注的地面标签,并从应用程序中实时运行完整的神经网络。

image.png

整个应用程序是一个完全自包含的300行 Python脚本,其中大多数都是机器学习代码。实际上,整个程序中,只有23个 Streamlit 的调用,可以使用如下命令运行这个演示示例

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


Streamlit 的优点

1. Streamlit 是纯 Python 文件,正因为如此,你可以在 Streamlit 中使用任何你喜欢的编辑器和调试器。

image.png

2. 与 Git 或其他代码控制软件无缝配合。

image.png

3. Streamlit 提供了实时编辑模式,当 Streamlit 检测到源文件有修改时,只需要单击重新运行按钮,就可以加载最新的文件代码

image.png

4. 缓存简化了计算管道的设置,缓存的功能会自动创建高效的计算管道。


import streamlit as st
import pandas as pd
@st.cache
def load_metadata():
    DATA_URL = "https://streamlit-self-driving.s3-us-west-2.amazonaws.com/labels.csv.gz"
    return pd.read_csv(DATA_URL, nrows=1000)
@st.cache
def create_summary(metadata, summary_type):
    one_hot_encoded = pd.get_dummies(metadata[["frame", "label"]], columns=["label"])
    return getattr(one_hot_encoded.groupby(["frame"]), summary_type)()
# Piping one st.cache function into another forms a computation DAG.
summary_type = st.selectbox("Type of summary:", ["sum", "any"])
metadata = load_metadata()
summary = create_summary(metadata, summary_type)
st.write('## Metadata', metadata, '## Summary', summary)

事实上,所谓的管道就是 load_metadata -> create_summary。每次运行脚本,Streamlit 都会重新计算需要正确答案的管道子集。

image.png

5. Streamlit 是为 GPU 而创建的,Streamlit 允许直接访问机器级别原语,例如:TensorFlow 和 PyTorch,并做了相应补充。


在示例中,Streamlit 缓存了整个 NVIDIA 的名人头像,当用户更新滑动块时,就可以实现瞬时推断

image.png

6. Streamlit 是一个免费的开源库,而不是一个专门的 web 程序。你可以在自己本地轻松的运行 Streamlit,并且可以逐步把老的项目切换至 Streamlit

image.png

很高兴能够与社区一起共享 Streamlit,并看到大家使用它来构建新的东西。我们也希望你能够在将 Python 脚本转换为 ML 应用中找到应有的快乐。

相关文章
|
9天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
106 60
|
2月前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
6天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
50 33
|
20小时前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
28天前
|
数据采集 存储 监控
21个Python脚本自动执行日常任务(2)
21个Python脚本自动执行日常任务(2)
88 7
21个Python脚本自动执行日常任务(2)
|
18天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
83 5
|
30天前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
240 7
|
1月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
52 7
|
2月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
2月前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势