如何免費雲端運行Python深度學習框架?

想運行TuriCreate,卻沒有蘋果電腦,也沒有Linux使用經驗,怎麼辦?用上這款雲端應用,讓你免安裝Python運行環境。一分錢不用花,以高性能GPU,輕鬆玩兒轉深度學習。python

痛點

如何用Python和深度神經網絡識別圖像?》一文發佈後,收到了不少讀者的留言。你們對從前印象中遙不可及的深度神經網絡圖片識別來了興趣,都打算親自動手,試用一下簡單易用的TuriCreate框架。git

有的讀者嘗試以後,很開心。github

有的讀者卻遇到了問題:編程

我在《如何用Python和深度神經網絡尋找近似圖片?》一文中,對這個疑問作了迴應——TuriCreate目前支持的操做系統有限,只包括以下選項:瀏覽器

若是你用的操做系統是Windows 7及如下版本,目前TuriCreate還不支持。安全

解決辦法有兩種:bash

第一種,升級到Windows 10,而且使用WSL。服務器

第二種,採用虛擬機安裝好Linux。微信

這兩種解決方法好很差?網絡

很差。

它們都是沒有辦法的辦法。

由於都須要用戶接觸到Linux這個新系統。

對於IT專業人士來講,Linux確實是個好東西。

首先,它免費。所以能夠把軟硬件的綜合使用成本降到最低;

其次,它靈活。從系統內核到各類應用,你均可以爲所欲爲定製。不像Windows或者macOS,管你用不用西班牙語和文本語音朗讀功能,通通默認一股腦給你裝上;

第三,它結實。Linux雖然免費,可是從創生出來就是以UNIX做爲參考對象,徹底能夠勝任運行在一年都不關機一回的大型服務器上。

可是,Linux這些優勢,放到我專欄的主要閱讀羣體——「文科生」——那裏,就不必定是什麼好事兒了。

由於Linux的學習曲線,很陡峭。

因此,若是你執拗地堅持在本身的電腦上運行TuriCreate,又不肯意學Linux,那可能就得去買臺Macbook了。

可是,誰說運行代碼必定要在本身的機器上呢?

雲端

你能夠把TuriCreate安裝在雲端——只要雲端的主機是Linux就好。

你可能怒了,以爲我是在戲耍你——我要是會用Linux,就直接本地安裝了!本地的Linux我都不會用,還讓我遠程使用Linux?!你什麼意思嘛?

彆着急,聽我把話說完。

雲端的Linux主機,大可能是隻給你提供個操做系統,你能夠在上面自由安裝軟件,執行命令。

這樣的雲端系統,每每須要你具有至關程度的IT專業知識,才能輕鬆駕馭。

更要命的是,這種租用來的雲主機,要麼功能很弱,要麼很貴。

那種幾十塊錢一個月的主機,每每只有一個CPU核心。跑深度學習項目?只怕你還沒得到結果,別人的論文都發出來了。

有沒有高性能主機?固然有。

例如亞馬遜的AWS,就提供了p2.xlarge這樣的配置供你選擇。有了它,運行深度學習任務遊刃有餘。

可是它很貴

有人計算過,若是你須要長期使用深度學習功能,仍是本地組裝一臺高性能電腦比較划算。

另外,雖然亞馬遜已經幫你作了不少準備工做。你從開始折騰這臺雲主機到真正熟練掌握使用,仍是要花些功夫。

從網上找一篇靠譜的教程後,通過本身的反覆實踐,不斷求助,最終你會掌握如下技能:

  • 硬件配置含義;
  • 雲平臺信用卡支付方式;
  • 控制面板使用;
  • 計費原理;
  • 競價規則;
  • 實例使用限制;
  • 定製實例類型選擇;
  • 安全規則設定;
  • 公鑰私鑰的使用;
  • 加密通信ssh鏈接;
  • 文件權限設定;
  • 其餘……

瞭解瞭如何最省錢地運行高配置AWS虛擬主機,知道該在什麼時候啓動和關閉實例。一個月下來,你看着帳單上的金額如此之少,會特別有成就感吧。

問題是,你最初是想要幹什麼來着?

你好像只是打算把手頭的照片,利用TuriCreate上的卷積神經網絡快速作個分類模型出來吧?

因此,這種折騰不是正道。

在某些時刻,作出正確的選擇比盲目付出努力重要得多。

你應該選擇一個雲平臺,它得具備以下特點:

你沒必要會Linux,也不用從頭裝一堆基礎軟件。打開就能用,須要哪一個額外的功能,一條指令就搞定。提供高性能GPU用來運行深度學習代碼……最好還免費。

你是否是以爲我在作夢?猶豫着要不要趕忙喊我醒過來?

這不是作夢,真的有這樣的好事兒。

發現

本文推薦給你的雲運行環境,是由Google提供的Colaboratory,下文簡稱Colab。

其實這個工具已經存在了好幾年了。

最第一版本由Google和Jupyter團隊合做開發。只是最近才迭代到漸入佳境的狀態。通過這篇Medium文章的推廣,吸引了不少研究者和學習者的關注。

官方的介紹是:

Colaboratory 是一款研究工具,用於進行機器學習培訓和研究。它是一個 Jupyter 筆記本環境,不須要進行任何設置就可使用。

請用Google Chrome瀏覽器打開這個連接,你能夠看到這份「Colaboratory簡介」。

雖然外觀不一樣,可是它實際上就是一份Jupyter Notebook筆記本。

咱們嘗試運行一下其中的語句。

注意這個筆記本里面的語句,實際上是Python 2格式。可是默認筆記本的運行環境,是Python 3。

因此,若是你直接執行第一句(依然是用Shift+Enter),會報錯。

解決辦法很是簡單,打開上方工具欄中的「代碼執行程序」標籤頁。

選擇最下方的「更改運行時類型」。

將默認的Python 3改爲Python 2以後,點擊右下角的保存按鈕。

而後咱們從新運行第一個代碼區塊的語句。此次就能正常輸出了。

語句區塊2就更有意思了。它直接調用Google自家的深度學習框架——tensorflow軟件包。

我曾經專門爲tensorflow的安裝寫過教程。可是在這裏,你根本就沒有安裝tensorflow,它卻實實在在爲你工做了。

不只是tensorflow,許多經常使用的數據分析工具包,例如numpy, matplotlib都默認安裝好了。

對於這些基礎工具,你一律不須要安裝、配置、管理,只要拿過來使用就行。

咱們運行最後一個代碼單元。

看,圖片輸出都毫無問題。

編程環境領域的即插即用啊!太棒了!

但是興奮事後,你可能以爲不過如此——這些軟件包,我本地機器都正確安裝了。執行起來,再怎麼說也是本地更方便一些啊。

沒錯。

可是安裝TuriCreate時,你的Windows操做系統不支持,對不對?

下面我爲你展現如何用Colab運行TuriCreate,進行深度學習。

數據

我把須要分類的圖像數據以及ipynb文件都放到了這個github項目中。請點擊這個連接下載壓縮包。

下載後解壓到本地硬盤。

能夠看到,其中包含一個ipynb文件和一個image目錄。

image目錄內容,就是你以前在《如何用Python和深度神經網絡尋找近似圖片?》一文中已經見過的哆啦a夢和瓦力的圖片。

這是藍胖子的圖片:

這是瓦力的圖片:

請用Google Chrome瀏覽器(目前Colab尚不支持其餘瀏覽器)打開這個連接,開啓你的Google Drive。

固然,若是你尚未Google帳號,須要註冊一個,而後登陸使用。

下面,把你剛剛解壓的那個文件夾拖拽到Google Drive的頁面上,系統自動幫你上傳。

上傳完成後,在Google Drive裏打開這個文件夾。

demo_python_image_classification.ipynb文件上單擊鼠標右鍵。選擇打開方式爲Colaboratory。

Colab打開後的ipynb文件以下圖所示。

咱們首先須要肯定運行環境。點擊菜單欄裏面的「修改」,選擇其中的「筆記本設置」。

確認運行時類型爲Python 2,硬件加速器爲GPU。若是不是這樣的設置,請修改。而後點擊保存。

數據有了,環境也已配置好。下面咱們正式開始運行代碼了。

代碼

咱們嘗試讀入TuriCreate軟件包。

import turicreate as tc
複製代碼

結果會有以下報錯。

遇到這個報錯很正常。

由於咱們還沒有安裝TuriCreate。

不是說不須要安裝深度學習框架嗎?

那得看是誰家的深度學習框架了。

Colab默認安裝Tensorflow,由於它是Google自家開發的深度學習框架。

而TuriCreate是蘋果的產品,因此須要我們手動安裝。

手動安裝很麻煩嗎?

纔不會。

新開一個代碼單元,而後輸入如下一行語句:

!pip install turicreate
複製代碼

你就能夠看到Colab幫你辛勤地安裝TuriCreate以及所有依賴包了,根本不用本身操心。瞬間就安裝好了。

咱們從新調用TuriCreate。

import turicreate as tc
複製代碼

此次成功執行,再沒有出現報錯。

下面咱們須要作一件事情,就是讓Colab能夠從咱們的數據文件夾裏面讀取內容。

但是默認狀態下,Colab根本就不知道咱們的數據文件夾在哪裏——即使咱們原本就是從Google Drive的演示文件夾下面打開這個ipynb文件的。

咱們首先要讓Colab找到Google Drive的根目錄。

這本來是一個相對複雜的問題。可是好在咱們有現成的代碼,能夠拿來使用。

請執行下面這個單元格的代碼。看不懂不要擔憂。由於你不須要調整其中的任何語句。

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
複製代碼

執行剛開始,你會看到下面的運行狀態。

過了一小會兒,你會發現程序停了下來。給你一個連接,讓你點擊。而且囑咐你把得到的結果填入下面的文本框。

點擊連接,你會看到下圖。

點擊你本身的Google帳號。

而後會提示你Google Cloud SDK的權限請求。

點擊容許後,你就得到了一長串字符了。複製它們。

回到Colab頁面上,把這一長串字符粘貼進去,回車。

你可能認爲運行完畢。不對,還須要第二步驗證。

又出來了一個連接。

點擊以後,仍是讓你選擇帳號。

而後Google Cloud SDK又提出了權限要求。注意和上次的請求權限數量不同

你須要再複製另外的一串新字符。

粘貼回去,回車。此次終於執行完畢。

好了,如今Colab已經接管了你的Google Drive了。咱們給Google Drive雲端硬盤的根目錄起個名字,叫作drive。

!mkdir -p drive
!google-drive-ocamlfuse drive
複製代碼

而後,咱們告訴Colab,請把咱們當前的工做目錄設定爲Google Drive下的demo-python-image-classification-Google-colab-master文件夾。

import os
os.chdir("drive/demo-python-image-classification-Google-colab-master/")
複製代碼

好了,準備工做完畢,咱們繼續。

咱們須要告訴TuriCreate,圖像數據文件夾在哪裏。

img_folder = 'image'
複製代碼

而後,咱們讀入所有圖像文件到數據框data。

data = tc.image_analysis.load_images(img_folder, with_path=True)
複製代碼

這裏,你會發現讀入速度比較慢。這確實是個問題,是不是由於TuriCreate的SFrame數據框在Colab上有些水土不服?目前我還不能肯定。

好在我們樣例中的文件總數很少,還能接受。

終於讀取完畢了。

咱們看看data中包含哪些數據吧。

data
複製代碼

跟Jupyter Notebook本地運行結果一致,都是文件路徑,以及圖片的尺寸信息。

下面,咱們仍是給圖片打標記。

來自哆啦a夢文件夾的,標記爲doraemon;不然標記爲walle。

data['label'] = data['path'].apply(lambda path: 'doraemon' if 'doraemon' in path else 'walle')
複製代碼

再看看data數據框內容。

data
複製代碼

可見,標記已經成功打好。

咱們嘗試用explore()函數瀏覽data數據框,查看圖片。

data.explore()
複製代碼

可是很不幸,TuriCreate提示咱們,該功能暫時只支持macOS.

別忘了,咱們如今使用的,是Linux操做系統,因此沒法正常使用explore()函數。不過這只是暫時的,未來說不定哪天就支持了。

幸虧,這個功能跟咱們的圖像分類任務關係不大。咱們繼續。

把數據分紅訓練集與測試集,咱們使用統一的隨機種子取值,以保證我們得到的結果可重複驗證。

train_data, test_data = data.random_split(0.8, seed=2)
複製代碼

下面咱們正式創建而且訓練模型。

model = tc.image_classifier.create(train_data, target='label')
複製代碼

運行的時候,你會發現,本來須要很長時間進行的預訓練模型參數下載,竟然瞬間就能完成。

這是怎麼回事兒?做爲思考題,留給你自行探索解答。給你一個小提示:雲存儲。

TuriCreate自動幫咱們處理了圖像尺寸歸一化,而且進行了多輪迭代,尋找合適的超參數設置結果。

好了,咱們嘗試用訓練集生成的模型,在測試集上面預測一番。

predictions = model.predict(test_data)
複製代碼

預測結果如何?咱們用evaluate()函數來作個檢驗。

metrics = model.evaluate(test_data)
print(metrics['accuracy'])
複製代碼

結果以下:

0.935483870968
複製代碼

咱們看看預測的結果:

predictions
複製代碼
dtype: str
Rows: 31
['doraemon', 'walle', 'walle', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle']
複製代碼

再看看實際的標記:

test_data['label']
複製代碼
dtype: str
Rows: 31
['walle', 'walle', 'walle', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle']
複製代碼

兩相比對,咱們但願找出那些錯誤預測的圖片存儲位置:

test_data[test_data['label'] != predictions]['path']
複製代碼

下面咱們須要直觀瀏覽一下預測錯誤的圖像。

讀入Jupyter的Image模塊,用於展現圖像。

from IPython.display import Image
複製代碼

咱們先來展現第一幅圖像:

Image(test_data[test_data['label'] != predictions]['path'][0])
複製代碼

結果以下:

仍是老樣子,50層的深度神經網絡模型,已經沒法讓人直觀理解。因此咱們沒法確切查明到底是哪一個斷定環節上出了問題。

然而直觀猜想,咱們發如今整個照片裏,方方正正的瓦力根本就不佔主要位置。反卻是圓頭圓腦的機器人成了主角。這樣一來,給圖片造成了比較嚴重的噪聲。

咱們再來看看另外一幅圖:

Image(test_data[test_data['label'] != predictions]['path'][1])
複製代碼

結果是這樣的:

這幅圖裏面,一樣存在大量的干擾信息,並且就連哆啦a夢也作了海盜cosplay。

好了,到這裏,咱們的代碼遷移到Colab工做順利完成。

如你所見,咱們不須要在本地安裝任何軟件包。只用了一個瀏覽器和一個從github下載的文件夾,就完成了TuriCreate深度學習的(幾乎)所有功能。

比起虛擬機安裝Linux,或者本身設定雲端Linux主機,是否是輕鬆多了呢?

小結

經過閱讀本文,但願你已經掌握瞭如下知識點:

  • 某些深度學習框架,例如TuriCreate,會有平臺依賴;
  • 除了本地安裝開發環境外,雲端平臺也是一種選擇;
  • 選擇雲端平臺時,特別要注意設置的簡便性與性價比;
  • 如何將數據和代碼經過Google Drive遷移到Colab中;
  • 如何在Colab中安裝缺失的軟件包;
  • 如何讓Colab找到數據文件路徑。

另外,請你在爲需求選擇工具的時候,記住哈佛大學營銷學教授萊維特(Theodore Levitt)的那句經典名言:

人們其實不想買一個1/4英寸的鑽頭。他們只想要一個1/4英寸的洞。

這句話不只對學習者和開發者有用。

對於產品的提供者,意義只怕更爲重大。

討論

你以前正確安裝了TuriCreate了嗎?用的什麼操做系統?你嘗試過在雲端運行Python代碼嗎?有沒有比Colab更好的雲端代碼運行環境?歡迎留言,把你的經驗和思考分享給你們,咱們一塊兒交流討論。

喜歡請點贊。還能夠微信關注和置頂個人公衆號「玉樹芝蘭」(nkwangshuyi)

若是你對數據科學感興趣,不妨閱讀個人系列教程索引貼《如何高效入門數據科學?》,裏面還有更多的有趣問題及解法。

相關文章
相關標籤/搜索