有了这款神器,轻松用 Python 写个 APP

关注: Python编程大全 ,加星标精彩内容不迷路

机器学习开发者想要打造一款 App 有多难?事实上,你只需要会 Python 代码就可以了,剩下的工作都可以交给一个工具。近日,Streamlit 联合创始人 Adrien Treuille 撰文介绍其开发的机器学习工具开发框架——Streamlit,这是一款专为机器学习工程师创建的免费、开源 app 构建框架。这款工具可以在你写 Python 代码的时候,实时更新你的应用。目前,Streamlit 的 GitHub Star 量已经超过 3400,在 medim 上的热度更是达到了 9000+。

Streamlit 网站:https://streamlit.io/

GitHub地址:https://github.com/streamlit/streamlit/

用 300 行 Python 代码,编程一个可实时执行神经网络推断的语义搜索引擎。

以我的经验,每一个不平凡的机器学习项目都是用错误百出、难以维护的内部工具整合而成的。这些工具通常用 Jupyter Notebooks 和 Flask app 写成,很难部署,需要对客户端服务器架构(C/S 架构)进行推理,且无法与 Tensorflow GPU 会话等机器学习组件进行很好的整合。

我第一次看到此类工具是在卡内基梅隆大学,之后又在伯克利、Google X、Zoox 看到。这些工具最初只是小的 Jupyter notebook:传感器校准工具、仿真对比 app、激光雷达对齐 app、场景重现工具等。

当一个工具越来越重要时,项目经理会介入其中:进程和需求不断增加。这些单独的项目变成代码脚本,并逐渐发展成为冗长的「维护噩梦」……

机器学习工程师创建 app 的流程(ad-hoc)。

而当一个工具非常关键时,我们会组建工具团队。他们熟练地写 Vue 和 React,在笔记本电脑上贴满声明式框架的贴纸。他们的设计流程是这样式的:

工具团队构建 app 的流程(干净整洁,从零开始)。

这简直太棒了!但是所有这些工具都需要新功能,比如每周上线新功能。然而工具团队可能同时支持 10 多个项目,他们会说:「我们会在两个月内更新您的工具。」

我们返回之前自行构建工具的流程:部署 Flask app,写 HTML、CSS 和 JavaScript,尝试对从 notebook 到样式表的所有一些进行版本控制。我和在 Google X 工作的朋友 Thiago Teixeira 开始思考:如果构建工具像写 Python 脚本一样简单呢?

我们希望在没有工具团队的情况下,机器学习工程师也能构建不错的 app。这些内部工具应该像机器学习工作流程的副产品那样自然而然地出现。写此类工具感觉就像训练神经网络或者在 Jupyter 中执行点对点分析(ad-hoc analysis)!同时,我们还想保留强大 app 框架的灵活性。我们想创造出令工程师骄傲的好工具。

我们希望的 app 构建流程如下:

Streamlit app 构建流程。

与来自 Uber、Twitter、Stitch Fix、Dropbox 等的工程师一道,我们用一年时间创造了 Streamlit,这是一个针对机器学习工程师的免费开源 app 框架。不管对于任何原型,Streamlit 的核心原则都是更简单、更纯粹。

Streamlit 的核心原则如下:

1. 拥抱 Python

Streamlit app 是完全自上而下运行的脚本,没有隐藏状态。你可以利用函数调用来处理代码。只要你会写 Python 脚本,你就可以写 Streamlit app。例如,你可以按照以下代码对屏幕执行写入操作:



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


2. 把 widget 视作变量

Streamlit 中没有 callback!每一次交互都只是自上而下重新运行脚本。该方法使得代码非常干净:



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


3 行代码写成的 Streamlit 交互 app。

3. 重用数据和计算

如果要下载大量数据或执行复杂计算,怎么办?关键在于在多次运行中安全地重用信息。Streamlit 引入了 cache primitive,它像一个持续的默认不可更改的数据存储器,保障 Streamlit app 轻松安全地重用信息。例如,以下代码只从 Udacity 自动驾驶项目(https://github.com/udacity/self-driving-car)中下载一次数据,就可得到一个简单快速的 app:

_使用 st.cache,在 Streamlit 多次运行中保存数据。_代码运行说明,参见:

https://gist.github.com/treuille/c633dc8bc86efaa98eb8abe76478aa81#gistcomment-3041475。

运行以上 st.cache 示例的输出。

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

  1. 每次用户交互均需要从头运行全部脚本。

  2. Streamlit 根据 widget 状态为每个变量分配最新值。

  3. 缓存保证 Streamlit 重用数据和计算。

如下图所示:

_用户事件触发 Streamlit 从头开始重新运行脚本。_不同运行中仅保留缓存。

感兴趣的话,你可以立刻尝试!只需运行以下行:

网页浏览器将自动打开,并转向本地 Streamlit app。如果没有出现浏览器窗口,只需点击链接。

这些想法很简洁,但有效,使用 Streamlit 不会妨碍你创建丰富有用的 app。我在 Zoox 和 Google X 工作时,看着自动驾驶汽车项目发展成为数 G 的视觉数据,这些数据需要搜索和理解,包括在图像数据上运行模型进而对比性能。我看到的每一个自动驾驶汽车项目都有整支团队在做这方面的工具。

在 Streamlit 中构建此类工具非常简单。以下 Streamlit demo 可以对整个 Udacity 自动驾驶汽车照片数据集执行语义搜索,对人类标注的真值标签进行可视化,并在 app 内实时运行完整的神经网络(YOLO)。

这个 300 行代码写成的 Streamlit demo 结合了语义视觉搜索和交互式神经网络推断。

整个 app 只有 300 行 Python 代码,其中大部分是机器学习代码。事实上,整个 app 里只有 23 次 Streamlit 调用。你可以试试看:

我们与机器学习团队合作,为他们的项目而努力时,逐渐意识到这些简单的想法会带来大量重要的收益:

Streamlit app 是纯 Python 文件。你可以使用自己喜欢的编辑器和 debugger。

我用 Streamlit 构建 app 时喜欢用 VSCode 编辑器(左)和 Chrome(右)。

纯 Python 代码可与 Git 等源码控制软件无缝对接,包括 commits、pull requests、issues 和 comment。由于 Streamlit 的底层语言是 Python,因此你可以免费利用这些协作工具的好处。

Streamlit app 是 Python 脚本,因此你可以使用 Git 轻松执行版本控制。

Streamlit 提供即时模式的编程环境。当 Streamlit 检测出源文件变更时,只需点击 Always rerun 即可。

点击「Always rerun」,保证实时编程。

缓存简化计算流程。一连串缓存函数自动创建出高效的计算流程!你可以尝试以下代码:

_Streamlit 中的简单计算流程。_运行以上代码,参见说明:

https://gist.github.com/treuille/ac7755eb37c63a78fac7dfef89f3517e#gistcomment-3041436。

基本上,该流程涉及加载元数据到创建摘要等步骤(load_metadata → create_summary)。该脚本每次运行时,Streamlit 仅需重新计算该流程的子集即可。

为了保证 app 的可执行性,Streamlit 仅计算更新 UI 所必需的部分。

Streamlit 适用于 GPU。Streamlit 可以直接访问机器级原语(如 TensorFlow、PyTorch),并对这些库进行补充。例如,以下 demo 中,Streamlit 的缓存存储了整个英伟达 PGGAN。该方法可使用户在更新左侧滑块时,app 执行近乎即时的推断。

该 Streamlit app 使用 TL-GAN 展示了英伟达 PGGAN 的效果。

Streamlit 是免费开源库,而非私有 web app。你可以本地部署 Streamlit app,不用提前联系我们。你甚至可以在不联网的情况下在笔记本电脑上本地运行 Streamlit。此外,现有项目也可以渐进地使用 Streamlit。

渐进地使用 Streamlit 的几种方式。

以上只是 Streamlit 功能的冰山一角而已。它最令人兴奋的一点是,这些原语可以轻松组成复杂 app,但看起来却只是简单脚本。这就要涉及架构运作原理和功能了,本文暂不谈及。

Streamlit 组件图示。

以上就是“有了这款神器,轻松用 Python 写个 APP”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。



  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不多说废话,看题目,本教程适合练手,会python+android基础的人群,文件较大,上传乃是下载链接,下面上目录: 1-1 课程导学 2-1 如何学好Android App性能测试? 2-10 详解【电量】监控值的获取方法 \' D, l" p) d6 d. K9 [7 p 2-11 详解【电量】监控脚本实现和数据分析 O, e4 X& K0 S% h8 v8 V9 ? 2-12 详解【内存】监控值的获取方法 k! e6 e# C" K% z9 k- l 2-13 详解【内存】监控脚本实现和数据分析0 d; e- S% G6 r3 H: g 2-14 详解【FPS&过度渲染】的概念和监控方法 - 分析页面卡慢的方法# G! _2 O9 T* j" K s3 v6 C0 l 2-2 工欲善其事必先利其器-性能测试环境准备 2-3 详解【启动时间】监控值的获取方法0 n( p* l; g C 2-4 详解【启动时间】监控脚本实现% B2 z( C( E& S: n r1 e 2-5 详解【启动时间】数据分析 2-6 【启动时间】时间戳差值监控方法概要介绍 2-7 详解【CPU】监控值的获取方法、脚本实现和数据分析 2-8 详解【流量】监控值的获取方法7 r7 ~/ D5 |+ h9 m9 i6 p) b: Y 2-9 详解【流量】监控脚本实现和数据分析2 [9 {# {$ c9 k/ T, `/ t" \ 3-1 为什么需要使用框架实现自动化测试? 3-10 UnitTest框架之TestCase,TestSuite,TestRunner简介3 A2 {1 F2 @; K 3-11 UnitTest框架之TestSuite,TestRunner自动化测试 3-12 数据驱动框架DDT简介 3-13 数据驱动框架DDT的使用方法 3-14 数据驱动框架DDT实战; 3-2 准备一个被测APP 3-3 工欲善其事必先利其器-自动化测试环境准备 3-4 Android App自动化测试(一) 3-5 Android App自动化测试(二) 3-6 Android App自动化测试(三) 3-7 UnitTest框架之TestFixture简介 3-8 UnitTest框架之TestFixture自动化测试(一) 3-9 UnitTest框架之TestFixture自动化测试(二) 4-1 如何学好Android App API接口测试? 4-10 Fiddler构造HTTP Get请求 4-11 Fiddler构造HTTP Post请求 4-12 Fiddler抓取手机上的网络数据包 4-13 为什么使用PostMan做API接口测试 4-14 工欲善其事必先利其器-PostMan工具准备 4-15 PostMan测试HTTP Get请求 4-16 PostMan测试HTTP Post请求 4-17 数据驱动DDT实现API接口自动化测试简介) 4-18 Python requests测试HTTP中的Get、Post请求 4-19 数据驱动DDT实现API接口自动化测试(一) 4-2 什么是API 4-20 数据驱动DDT实现API接口自动化测试(二); 4-3 抓包神器Fiddler简介 4-4 Fiddler抓包原理解析 4-5 Fiddler修改客户端发出的请求(一) 4-6 Fiddler修改客户端发出的请求(二) 4-7 Fiddler修改服务器端返回的内容 4-8 Fiddler实现会话的过滤、对比及请求的编解码 4-9 Fiddler实现Host的配置 5-1 测试工程师为什么需要掌握持续集成? 5-2 持续集成的概念、流程和意义 5-3 讲解持续集成工具Jenkins3 5-4 Jenkins工具密码的修改 5-5 Jenkins工具的配置说明 5-6 Jenkins工具系统配置和Job配置 5-7 Jenkins工具手动持续集成实战 5-8 Jenkins工具自动化持续集成实战 6-1 Native App自动化测试及Appuim框架介绍 6-2 自动化测试环境、元素识别工具、脚本设计原则-LOVE原则的讲解 6-3 Native App自动化脚本的实现 6-4 Appium自动化测试框架API讲解与案例实践(一) 6-5 Appium自动化测试框架API讲解与案例实践(二) 6-6 Appium自动化测试框架API讲解与案例实践(三) 6-7 Appium自动化测试框架API讲解与案例实践(四) 6-8 Appium自动化测试框架API讲解与案例实践(五) 6-9 Appium自动化测试框架API讲解与案例实践(六) 7-1 Hybrid App自动化测试概要 7-2 Appium基于Sele

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值