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

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

痛点


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


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


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

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

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


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


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

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

Streamlit 核心



拥抱 Python 脚本



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

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



视组件为变量



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


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




重用数据和计算



如果你需要大量的数据或需要复杂的计算怎么办?其关键就是跨运行安全的重用信息。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])

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

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

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

3. 缓存允许 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 程序,如果没有,那么需要手动输入。

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


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




整个应用程序是一个完全自包含的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 中使用任何你喜欢的编辑器和调试器。



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

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


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 都会重新计算需要正确答案的管道子集。



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


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



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

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


原文地址:https://towardsdatascience.com/coding-ml-tools-like-you-code-ml-models-ddba3357eace

相关文章
|
2天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
34 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
1月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
106 61
Python装饰器实战:打造高效性能计时工具
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
213 61
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
1月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
80 37
Python时间序列分析工具Aeon使用指南
|
3月前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
25天前
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
51 14
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33

热门文章

最新文章

推荐镜像

更多