<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          有了這個(gè)神器,輕松用 Python 寫 APP !

          共 4370字,需瀏覽 9分鐘

           ·

          2019-11-05 23:22

          ?本文轉(zhuǎn)自機(jī)器之心?

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


          22eeb9b1a15b47cca7065e9ffbcc2033.webp

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


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


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


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


          7d0d1b60ac747737882d999bfe6a928e.webp

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


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


          57257cef73ce34d3a5eae5f16d8441a3.webp

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


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


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


          我們希望在沒有工具團(tuán)隊(duì)的情況下,機(jī)器學(xué)習(xí)工程師也能構(gòu)建不錯(cuò)的 app。這些內(nèi)部工具應(yīng)該像機(jī)器學(xué)習(xí)工作流程的副產(chǎn)品那樣自然而然地出現(xiàn)。寫此類工具感覺就像訓(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)建流程如下:


          d076645aa217ee69a7909a890bef6b74.webp

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


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


          Streamlit 的核心原則如下:


          1. 擁抱 Python


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

          2fdf5e3d5b735a61dc226c1137637a44.webp
          2. 把 widget 視作變量


          Streamlit 中沒有 callback!每一次交互都只是自上而下重新運(yùn)行腳本。該方法使得代碼非常干凈:
          import?streamlit?as?stx?=?st.slider('x')
          st.write(x,?'squared?is',?x?*?x)

          3f67e75133ed4abdafc69fc672d65179.webp3 行代碼寫成的 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:

          2a4ac863292df0867a5a66f10ca8612b.webp

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


          35db4bee255a35c00ce86351b8a1fd31.webp

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


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


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

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

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


          如下圖所示:


          d7de6119a3fc4dcc09282a9651fe681a.webp

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


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


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


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


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


          fa1b5985772be5e324d7d8c3a8a5f694.webp

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


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


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


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


          517c52881b8a5cb2c96db3050be83f2d.webp

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


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


          e45301289bf3e74d9508d4daec86592e.webp

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


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


          efabdd15550482804980a713cf4291d0.webp

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


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


          2de2cfa652a711bf782f810c649fe624.webp

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


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


          796ac2c2388242e18db5b17051a22351.webp

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


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


          6dbcc15fdc7e58154fd52e0d29462a62.webp

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


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


          219945e4be868249a08fe0e8cc8bbc63.webp

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


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


          a8d64bc9ba7b9cf5c36dd549adb29638.webp

          Streamlit 組件圖示。


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


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


          參考文獻(xiàn):


          [1] J. Redmon and A. Farhadi, YOLOv3: An Incremental Improvement (2018), arXiv.[2] T. Karras, T. Aila, S. Laine, and J. Lehtinen, Progressive Growing of GANs for Improved Quality, Stability, and Variation (2018), ICLR.[3] S. Guan, Controlled image synthesis and editing using a novel TL-GAN model (2018), Insight Data Science Blog.
          覺得不錯(cuò),點(diǎn)個(gè)在看吧!
          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  乱伦777| a∨视频在线 | 国产无遮挡A片又黄又爽小直播 | 港台靓女性啪啪天美传媒精品性88xo | 日韩无码专区电影 |