0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器學(xué)習(xí)開(kāi)發(fā)者想要打造一款A(yù)pp有多難?

lviY_AI_shequ ? 來(lái)源:機(jī)器之心 ? 2020-05-12 10:06 ? 次閱讀

機(jī)器學(xué)習(xí)開(kāi)發(fā)者想要打造一款 App 有多難?事實(shí)上,你只需要會(huì) Python 代碼就可以了,剩下的工作都可以交給一個(gè)工具。近日,Streamlit 聯(lián)合創(chuàng)始人 Adrien Treuille 撰文介紹其開(kāi)發(fā)的機(jī)器學(xué)習(xí)工具開(kāi)發(fā)框架——Streamlit,這是一款專(zhuān)為機(jī)器學(xué)習(xí)工程師創(chuàng)建的免費(fèi)、開(kāi)源 app 構(gòu)建框架。這款工具可以在你寫(xiě) Python 代碼的時(shí)候,實(shí)時(shí)更新你的應(yīng)用。目前,Streamlit 的 GitHub Star 量已經(jīng)超過(guò) 3400,在 medim 上的熱度更是達(dá)到了 9000+。

Streamlit 網(wǎng)站:https://streamlit.io/ GitHub地址:https://github.com/streamlit/streamlit/

用 300 行 Python 代碼,編程一個(gè)可實(shí)時(shí)執(zhí)行神經(jīng)網(wǎng)絡(luò)推斷的語(yǔ)義搜索引擎。

以我的經(jīng)驗(yàn),每一個(gè)不平凡的機(jī)器學(xué)習(xí)項(xiàng)目都是用錯(cuò)誤百出、難以維護(hù)的內(nèi)部工具整合而成的。這些工具通常用 Jupyter Notebooks 和 Flask app 寫(xiě)成,很難部署,需要對(duì)客戶(hù)端服務(wù)器架構(gòu)(C/S 架構(gòu))進(jìn)行推理,且無(wú)法與 Tensorflow GPU 會(huì)話等機(jī)器學(xué)習(xí)組件進(jìn)行很好的整合。

我第一次看到此類(lèi)工具是在卡內(nèi)基梅隆大學(xué),之后又在伯克利、Google X、Zoox 看到。這些工具最初只是小的 Jupyter notebook:傳感器校準(zhǔn)工具、仿真對(duì)比 app、激光雷達(dá)對(duì)齊 app、場(chǎng)景重現(xiàn)工具等。

當(dāng)一個(gè)工具越來(lái)越重要時(shí),項(xiàng)目經(jīng)理會(huì)介入其中:進(jìn)程和需求不斷增加。這些單獨(dú)的項(xiàng)目變成代碼腳本,并逐漸發(fā)展成為冗長(zhǎng)的「維護(hù)噩夢(mèng)」……

機(jī)器學(xué)習(xí)工程師創(chuàng)建 app 的流程(ad-hoc)。

而當(dāng)一個(gè)工具非常關(guān)鍵時(shí),我們會(huì)組建工具團(tuán)隊(duì)。他們熟練地寫(xiě) Vue 和 React,在筆記本電腦上貼滿聲明式框架的貼紙。他們的設(shè)計(jì)流程是這樣式的:

工具團(tuán)隊(duì)構(gòu)建 app 的流程(干凈整潔,從零開(kāi)始)。

這簡(jiǎn)直太棒了!但是所有這些工具都需要新功能,比如每周上線新功能。然而工具團(tuán)隊(duì)可能同時(shí)支持 10 多個(gè)項(xiàng)目,他們會(huì)說(shuō):「我們會(huì)在兩個(gè)月內(nèi)更新您的工具?!?/p>

我們返回之前自行構(gòu)建工具的流程:部署 Flask app,寫(xiě) HTML、CSS 和 JavaScript,嘗試對(duì)從 notebook 到樣式表的所有一些進(jìn)行版本控制。我和在 Google X 工作的朋友 Thiago Teixeira 開(kāi)始思考:如果構(gòu)建工具像寫(xiě) Python 腳本一樣簡(jiǎn)單呢?

我們希望在沒(méi)有工具團(tuán)隊(duì)的情況下,機(jī)器學(xué)習(xí)工程師也能構(gòu)建不錯(cuò)的 app。這些內(nèi)部工具應(yīng)該像機(jī)器學(xué)習(xí)工作流程的副產(chǎn)品那樣自然而然地出現(xiàn)。寫(xiě)此類(lèi)工具感覺(jué)就像訓(xùn)練神經(jīng)網(wǎng)絡(luò)或者在 Jupyter 中執(zhí)行點(diǎn)對(duì)點(diǎn)分析(ad-hoc analysis)!同時(shí),我們還想保留強(qiáng)大 app 框架的靈活性。我們想創(chuàng)造出令工程師驕傲的好工具。

我們希望的 app 構(gòu)建流程如下:

Streamlit app 構(gòu)建流程。

與來(lái)自 Uber、Twitter、Stitch Fix、Dropbox 等的工程師一道,我們用一年時(shí)間創(chuàng)造了 Streamlit,這是一個(gè)針對(duì)機(jī)器學(xué)習(xí)工程師的免費(fèi)開(kāi)源 app 框架。不管對(duì)于任何原型,Streamlit 的核心原則都是更簡(jiǎn)單、更純粹。

Streamlit 的核心原則如下:

1. 擁抱 Python

Streamlit app 是完全自上而下運(yùn)行的腳本,沒(méi)有隱藏狀態(tài)。你可以利用函數(shù)調(diào)用來(lái)處理代碼。只要你會(huì)寫(xiě) Python 腳本,你就可以寫(xiě) Streamlit app。例如,你可以按照以下代碼對(duì)屏幕執(zhí)行寫(xiě)入操作:

importstreamlitasstst.write('Hello,world!')

2. 把 widget 視作變量

Streamlit 中沒(méi)有 callback!每一次交互都只是自上而下重新運(yùn)行腳本。該方法使得代碼非常干凈:

importstreamlitasstx=st.slider('x') st.write(x,'squaredis',x*x)

3 行代碼寫(xiě)成的 Streamlit 交互 app。

3. 重用數(shù)據(jù)和計(jì)算

如果要下載大量數(shù)據(jù)或執(zhí)行復(fù)雜計(jì)算,怎么辦?關(guān)鍵在于在多次運(yùn)行中安全地重用信息。Streamlit 引入了 cache primitive,它像一個(gè)持續(xù)的默認(rèn)不可更改的數(shù)據(jù)存儲(chǔ)器,保障 Streamlit app 輕松安全地重用信息。例如,以下代碼只從 Udacity 自動(dòng)駕駛項(xiàng)目(https://github.com/udacity/self-driving-car)中下載一次數(shù)據(jù),就可得到一個(gè)簡(jiǎn)單快速的 app:

使用 st.cache,在 Streamlit 多次運(yùn)行中保存數(shù)據(jù)。代碼運(yùn)行說(shuō)明,參見(jiàn):https://gist.github.com/treuille/c633dc8bc86efaa98eb8abe76478aa81#gistcomment-3041475。

運(yùn)行以上 st.cache 示例的輸出。

簡(jiǎn)而言之,Streamlit 的工作流程如下:

每次用戶(hù)交互均需要從頭運(yùn)行全部腳本。

Streamlit 根據(jù) widget 狀態(tài)為每個(gè)變量分配最新值。

緩存保證 Streamlit 重用數(shù)據(jù)和計(jì)算。

如下圖所示:

用戶(hù)事件觸發(fā) Streamlit 從頭開(kāi)始重新運(yùn)行腳本。不同運(yùn)行中僅保留緩存。

感興趣的話,你可以立刻嘗試!只需運(yùn)行以下行:

網(wǎng)頁(yè)瀏覽器將自動(dòng)打開(kāi),并轉(zhuǎn)向本地 Streamlit app。如果沒(méi)有出現(xiàn)瀏覽器窗口,只需點(diǎn)擊鏈接。

這些想法很簡(jiǎn)潔,但有效,使用 Streamlit 不會(huì)妨礙你創(chuàng)建豐富有用的 app。我在 Zoox 和 Google X 工作時(shí),看著自動(dòng)駕駛汽車(chē)項(xiàng)目發(fā)展成為數(shù) G 的視覺(jué)數(shù)據(jù),這些數(shù)據(jù)需要搜索和理解,包括在圖像數(shù)據(jù)上運(yùn)行模型進(jìn)而對(duì)比性能。我看到的每一個(gè)自動(dòng)駕駛汽車(chē)項(xiàng)目都有整支團(tuán)隊(duì)在做這方面的工具。

在 Streamlit 中構(gòu)建此類(lèi)工具非常簡(jiǎn)單。以下 Streamlit demo 可以對(duì)整個(gè) Udacity 自動(dòng)駕駛汽車(chē)照片數(shù)據(jù)集執(zhí)行語(yǔ)義搜索,對(duì)人類(lèi)標(biāo)注的真值標(biāo)簽進(jìn)行可視化,并在 app 內(nèi)實(shí)時(shí)運(yùn)行完整的神經(jīng)網(wǎng)絡(luò)(YOLO)。

這個(gè) 300 行代碼寫(xiě)成的 Streamlit demo 結(jié)合了語(yǔ)義視覺(jué)搜索和交互式神經(jīng)網(wǎng)絡(luò)推斷。

整個(gè) app 只有 300 行 Python 代碼,其中大部分是機(jī)器學(xué)習(xí)代碼。事實(shí)上,整個(gè) app 里只有 23 次 Streamlit 調(diào)用。你可以試試看:

我們與機(jī)器學(xué)習(xí)團(tuán)隊(duì)合作,為他們的項(xiàng)目而努力時(shí),逐漸意識(shí)到這些簡(jiǎn)單的想法會(huì)帶來(lái)大量重要的收益:

Streamlit app 是純 Python 文件。你可以使用自己喜歡的編輯器和 debugger。

我用 Streamlit 構(gòu)建 app 時(shí)喜歡用 VSCode 編輯器(左)和 Chrome(右)。

純 Python 代碼可與 Git 等源碼控制軟件無(wú)縫對(duì)接,包括 commits、pull requests、issues 和 comment。由于 Streamlit 的底層語(yǔ)言是 Python,因此你可以免費(fèi)利用這些協(xié)作工具的好處。

Streamlit app 是 Python 腳本,因此你可以使用 Git 輕松執(zhí)行版本控制。

Streamlit 提供即時(shí)模式的編程環(huán)境。當(dāng) Streamlit 檢測(cè)出源文件變更時(shí),只需點(diǎn)擊 Always rerun 即可。

點(diǎn)擊「Always rerun」,保證實(shí)時(shí)編程。

緩存簡(jiǎn)化計(jì)算流程。一連串緩存函數(shù)自動(dòng)創(chuàng)建出高效的計(jì)算流程!你可以嘗試以下代碼:

Streamlit 中的簡(jiǎn)單計(jì)算流程。運(yùn)行以上代碼,參見(jiàn)說(shuō)明:https://gist.github.com/treuille/ac7755eb37c63a78fac7dfef89f3517e#gistcomment-3041436。

基本上,該流程涉及加載元數(shù)據(jù)到創(chuàng)建摘要等步驟(load_metadata → create_summary)。該腳本每次運(yùn)行時(shí),Streamlit 僅需重新計(jì)算該流程的子集即可。

為了保證 app 的可執(zhí)行性,Streamlit 僅計(jì)算更新 UI 所必需的部分。

Streamlit 適用于 GPU。Streamlit 可以直接訪問(wèn)機(jī)器級(jí)原語(yǔ)(如 TensorFlow、PyTorch),并對(duì)這些庫(kù)進(jìn)行補(bǔ)充。例如,以下 demo 中,Streamlit 的緩存存儲(chǔ)了整個(gè)英偉達(dá) PGGAN。該方法可使用戶(hù)在更新左側(cè)滑塊時(shí),app 執(zhí)行近乎即時(shí)的推斷。

該 Streamlit app 使用 TL-GAN 展示了英偉達(dá) PGGAN 的效果。

Streamlit 是免費(fèi)開(kāi)源庫(kù),而非私有 web app。你可以本地部署 Streamlit app,不用提前聯(lián)系我們。你甚至可以在不聯(lián)網(wǎng)的情況下在筆記本電腦上本地運(yùn)行 Streamlit。此外,現(xiàn)有項(xiàng)目也可以漸進(jìn)地使用 Streamlit。

漸進(jìn)地使用 Streamlit 的幾種方式。

以上只是 Streamlit 功能的冰山一角而已。它最令人興奮的一點(diǎn)是,這些原語(yǔ)可以輕松組成復(fù)雜 app,但看起來(lái)卻只是簡(jiǎn)單腳本。這就要涉及架構(gòu)運(yùn)作原理和功能了,本文暫不談及。

Streamlit 組件圖示。

我們很高興與社區(qū)分享 Streamlit,希望它能夠幫助大家輕松將 Python 腳本轉(zhuǎn)化為美觀實(shí)用的機(jī)器學(xué)習(xí) app。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131841
  • 激光雷達(dá)
    +關(guān)注

    關(guān)注

    967

    文章

    3863

    瀏覽量

    188743
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84077

原文標(biāo)題:有了這個(gè)神器,輕松用 Python 寫(xiě) APP !

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    涂鴉App開(kāi)發(fā)工具App SDK

    聯(lián)網(wǎng)移動(dòng)應(yīng)用(IoTApp)開(kāi)發(fā)打造系列SDK,為開(kāi)發(fā)者提供了豐富的組件和示例代碼,可以快速實(shí)現(xiàn)移動(dòng)App對(duì)智能設(shè)備的連接、控制以及豐富
    的頭像 發(fā)表于 05-24 08:15 ?548次閱讀
    涂鴉<b class='flag-5'>App</b><b class='flag-5'>開(kāi)發(fā)</b>工具<b class='flag-5'>App</b> SDK

    Meta Quest商店優(yōu)化搜索權(quán)重,助力小型開(kāi)發(fā)者應(yīng)用

    此外,Meta 還將 Quest 應(yīng)用商店與旗下的“App Lab”進(jìn)行整合。App Lab 是一款專(zhuān)門(mén)面向初創(chuàng)公司/開(kāi)發(fā)者的軟件測(cè)試平臺(tái),只要符合基本技術(shù)及內(nèi)容要求,即可在該平臺(tái)上發(fā)
    的頭像 發(fā)表于 05-20 17:05 ?486次閱讀

    華為云開(kāi)發(fā)者桌面全新發(fā)布 CodeArts IDE for Python,極致優(yōu)雅云原生開(kāi)發(fā)體驗(yàn)

    近日,華為云正式發(fā)布 CodeArts IDE for Python,這是一款內(nèi)置華為自研 Python 語(yǔ)言服務(wù),提供智能編程、靈活調(diào)試能力的可擴(kuò)展桌面開(kāi)發(fā)工具,為華為云開(kāi)發(fā)者提供卓越
    的頭像 發(fā)表于 05-10 00:27 ?1112次閱讀
    華為云<b class='flag-5'>開(kāi)發(fā)者</b>桌面全新發(fā)布 CodeArts IDE for Python,極致優(yōu)雅云原生<b class='flag-5'>開(kāi)發(fā)</b>體驗(yàn)

    機(jī)智云開(kāi)發(fā)者中心:讓移動(dòng)APP應(yīng)用開(kāi)發(fā)更智能化

    智能化和高效。 ? 新版本開(kāi)發(fā)者中心的介紹 機(jī)智云物聯(lián)網(wǎng)新版本開(kāi)發(fā)者中心是一款專(zhuān)為開(kāi)發(fā)者設(shè)計(jì)的一體化開(kāi)發(fā)工具,旨在提供更智能、簡(jiǎn)便的移動(dòng)
    的頭像 發(fā)表于 03-26 16:45 ?255次閱讀
    機(jī)智云<b class='flag-5'>開(kāi)發(fā)者</b>中心:讓移動(dòng)<b class='flag-5'>APP</b>應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>更智能化

    Android 15的首個(gè)開(kāi)發(fā)者預(yù)覽版現(xiàn)已發(fā)布

    Android 15 的首個(gè)開(kāi)發(fā)者預(yù)覽版現(xiàn)已發(fā)布,以便各位開(kāi)發(fā)者能與我們通力協(xié)作,打造更優(yōu)秀的 Android 平臺(tái)。
    的頭像 發(fā)表于 03-12 14:16 ?686次閱讀
    Android 15的首個(gè)<b class='flag-5'>開(kāi)發(fā)者</b>預(yù)覽版現(xiàn)已發(fā)布

    鴻蒙開(kāi)發(fā)者預(yù)覽版如何?

    在24年的華為鴻蒙發(fā)布會(huì)中表示。預(yù)覽版已經(jīng)向開(kāi)發(fā)者開(kāi)放申請(qǐng),首批支持的機(jī)型分別為華為 Mate 60、華為Mate 60 Pro、華為Mate X5。 其HarmonyOS NEXT去除
    發(fā)表于 02-17 21:54

    鴻蒙系統(tǒng)優(yōu)缺點(diǎn),能否作為開(kāi)發(fā)者選擇

    星河版已經(jīng)是純血鴻蒙,但是它的發(fā)展些周期。生態(tài)圈的建立難度大,各大廠商加入鴻蒙原生開(kāi)發(fā)需要時(shí)間累積。 鴻蒙開(kāi)發(fā)人才空缺,由于鴻蒙作為一款新型的系統(tǒng),程序員們都是從0學(xué)起。所以市面上很
    發(fā)表于 02-16 21:00

    您有份OpenHarmony開(kāi)發(fā)者論壇2023年度總結(jié),請(qǐng)查收~

    ,OpenHarmony 開(kāi)發(fā)者論壇也整理不同的榜單,讓更多的人看到這些優(yōu)秀的貢獻(xiàn)。也為這些貢獻(xiàn)突出的各位開(kāi)發(fā)者準(zhǔn)備了些周邊禮品,以表謝意。希望我們能
    發(fā)表于 01-26 17:27

    蘋(píng)果新App Store支付政策惹怒軟件開(kāi)發(fā)者

    近日,蘋(píng)果公司的項(xiàng)新政策引發(fā)了軟件開(kāi)發(fā)者們的不滿和抗議。根據(jù)這項(xiàng)新政策,如果開(kāi)發(fā)者App Store上使用其他支付方式,就必須向蘋(píng)果公司支付高達(dá)27%的傭金。這
    的頭像 發(fā)表于 01-19 16:13 ?591次閱讀

    HarmonyOS SDK,助力開(kāi)發(fā)者打造煥然新的鴻蒙原生應(yīng)用

    。在 UI 界面設(shè)計(jì)上,UI 組件采用去繁從簡(jiǎn)的審美風(fēng)格,40 多個(gè)動(dòng)效 API 幫助開(kāi)發(fā)者打造富有空間感,精致細(xì)膩的視覺(jué)效果。同時(shí),HarmonyOS SDK 提供了接即用的場(chǎng)景化控件,把應(yīng)用常用
    發(fā)表于 01-19 10:31

    開(kāi)發(fā)者說(shuō)】開(kāi)發(fā)案例:使用canvas實(shí)現(xiàn)圖表系列之折線圖

    】,即可獲得投稿渠道。期待你們的分享~ 由于對(duì)HarmonyOS的興趣與開(kāi)發(fā)需求,我已經(jīng)打卡學(xué)習(xí)ArkTS語(yǔ)言28天了。在模擬開(kāi)發(fā)歷史項(xiàng)目的時(shí)候,會(huì)經(jīng)常需要使用到圖表這類(lèi)樣式展示,我決定結(jié)合之前
    的頭像 發(fā)表于 12-13 16:05 ?482次閱讀
    【<b class='flag-5'>開(kāi)發(fā)者</b>說(shuō)】<b class='flag-5'>開(kāi)發(fā)</b>案例:使用canvas實(shí)現(xiàn)圖表系列之折線圖

    歡迎加入飛騰派開(kāi)發(fā)者社區(qū),感謝每開(kāi)發(fā)者!

    發(fā)燒友論壇起策劃了飛騰派開(kāi)發(fā)板測(cè)評(píng)活動(dòng),受到了廣大開(kāi)發(fā)者的喜愛(ài)。 通過(guò)這次活動(dòng),飛騰派成功地吸引了眾多高質(zhì)量開(kāi)發(fā)者的關(guān)注和參與,進(jìn)步擴(kuò)
    發(fā)表于 12-11 16:11

    Kondo-為開(kāi)發(fā)者設(shè)計(jì)的磁盤(pán)清理工具

    kondo 是一款開(kāi)發(fā)者設(shè)計(jì)的磁盤(pán)清理工具,支持清理 16 種語(yǔ)言和工具鏈中的構(gòu)建相關(guān)產(chǎn)物。
    的頭像 發(fā)表于 12-09 17:26 ?499次閱讀
    Kondo-為<b class='flag-5'>開(kāi)發(fā)者</b>設(shè)計(jì)的磁盤(pán)清理工具

    TUYA開(kāi)發(fā)者大會(huì)(蘇州)盛大開(kāi)幕,涂鴉智能攜手全球開(kāi)發(fā)者共建IoT新生態(tài)

    精彩紛呈的商業(yè)洞見(jiàn)?!綯UYA開(kāi)發(fā)者大會(huì)(蘇州)現(xiàn)場(chǎng)】涂鴉PaaS2.0如何助力開(kāi)發(fā)者打造差異化產(chǎn)品,IoT長(zhǎng)連接能力如何拓展戶(hù)外出行場(chǎng)景,智慧商業(yè)IoTsolut
    的頭像 發(fā)表于 12-08 15:49 ?750次閱讀
    TUYA<b class='flag-5'>開(kāi)發(fā)者</b>大會(huì)(蘇州)盛大開(kāi)幕,涂鴉智能攜手全球<b class='flag-5'>開(kāi)發(fā)者</b>共建IoT新生態(tài)

    開(kāi)發(fā)者福利月】聽(tīng)開(kāi)發(fā)者故事,享節(jié)日福利

    代碼界擁有特殊意義的 1024 (2 的 10 次方) 寓意著開(kāi)發(fā)者的專(zhuān)業(yè)性和勤奮精神 這群默默無(wú)聞 卻又好像無(wú)所不能的幕后英雄 賦予了數(shù)字靈魂 讓冰冷的機(jī)器擁有了思考與執(zhí)行的能力 所以今天,我們
    的頭像 發(fā)表于 10-24 15:45 ?265次閱讀
    【<b class='flag-5'>開(kāi)發(fā)者</b>福利月】聽(tīng)<b class='flag-5'>開(kāi)發(fā)者</b>故事,享節(jié)日福利