跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

Google Colaboratory–適合Python初學者的雲端開發環境
  • 卷期:v0052
  • 出版日期:2020-03-20

作者:唐瑤瑤 / 臺灣大學計算機及資訊網路中心程式設計師


簡介

Colaboratory (以下簡稱Colab)是一個在雲端運行的編輯執行環境,由Google提供開發者虛擬機,並支援Python程式及機器學習TensorFlow演算法。最棒的是只需要瀏覽器就可以運作,完全免費,目前官方建議使用Chrome,Firefox或Safari。

 

Colab目的在提供Machine Learning機器學習教育訓練及研究用,不須下載、不須安裝就可直接應用Python 2.7 與 Python 3.6資源庫,對初學者來說可以快速入門,不需耗時間在環境設定上。程式碼預設會直接儲存在開發者的Google Drive雲端硬碟中,執行時由虛擬機提供強大的運算能力,不會用到本機的資源。但要注意在閒置一段時間後,虛擬機會被停止並回收運算資源,此時只需再重新連接即可。接下來我們就來看操作環境:

 

Colab Notebook環境介紹

開啟chrome先登入google帳號,連結URL https://colab.research.google.com/,出現對話窗如下,

 

按下右下角 NEW PYTHON 3 NOTEBOOK,出現如下的cell code區域。

 

點擊 code cell進入編輯模式並貼上這段python程式碼:

Art editor Img


按下左側執行button 或CTRL+Enter。會看到正態分布直方圖結果如下:

 

對了,Colab有code IntelliSense功能,以上述範例來說,在前面兩行import完numpy等函式庫後,請先按下執行。接著再寫 x= numpy.random.n…編輯器會自動顯示代碼完成,參數信息,快速信息和成員列表等功能,十分方便,如下圖。

 

將滑鼠移至code cell右上角RAM/Disk區域時,可以顯示本次執行虛擬機所分配的資源:約12GB RAM,100GB Disk,如下圖。

 

版本比較Revision History

點選工具列File -> Revision History,或直接於主工具列上按下All changes saved,有時會顯示Last saved at…(某時間點)。你會看到幾乎任何時間點的更動都被記錄下來,可以做檔案比較、選擇再次開啟歷史版本或復原版本。

 

於notebook (副檔名.ipynb)中任意加入code cell或text cell

由於Colab是基於Jupyter Notebook發展出來的互動式環境,可以任意加入code cell(使用Python和其他語言編寫和執行代碼)或text cell(使用稱為markdown的簡單標記語言進行格式化筆記)。在下圖中,「下面的global變數x值是由上面這個cell得來,且不用再import函式庫,即可畫出Scatter Plot。」這段敘述是在Text cell中,同樣用點擊區塊方式進入編輯模式。新增這些cells方式也很簡單,將滑鼠移到cell的上方或下方皆可。

 

接下來編輯執行第二個cell code,程式碼如下:
Art editor Img

 

得到錯誤訊息如下圖:

 

原來是x和y size必須相同。這是很容易修正的錯誤訊息,但是若一時看不出來問題在那兒呢?Colab在ValueError:下提供一個按鈕 ,方便我們查詢網站stack overflow的相關解答,非常實用。修改後就可畫出正確分布圖形了:

 

每一個code cell右上角都具有簡易工具列如下圖,最右邊的More cell actions中有Clear output功能,可快速清理output視窗。

 

Mounting Google Drive in your VM

展開Colab notebook左邊的區域,google提供很多方便的Code snippets範例程式碼,我們挑選存取google雲端硬碟的範例實作。

 

首先要mount上google drive,程式碼如下。

這裡的設定需要綁定權限,請按照指示,連上google oauth2 URL後認證,並複製貼上你的authorization code。

Art editor Img

 

當輸入驗證完成,會顯示Mounted at /gdrive,這就表示成功了。

 

接著在”我的雲端硬碟”中新增檔案foo.txt,並列印出內容。程式碼及執行結果如下:

Art editor Img


 

但我們其實應該到綁定google帳號的雲端硬碟去檢查,檔案是否真的寫入內容了。

 

針對google drive的存取,也可以利用python的PyDrive函式庫簡化對Google Drive API的使用,相關範例如下:

Art editor Img

 

因為會使用Google Cloud SDK,故執行時也會需要輸入驗證碼,此範例會傳回file ID供後續使用。

接下來測試列出.txt檔案,因為在同一本notebook,上面的函式庫及參數可以直接應用:

 

Art editor Img

            Art editor Img

 

 

接下來測試下載特定檔案:

Art editor Img

 

 

以上這些檔案操作練習讓我們了解如何使用google drive,之後我們便可將數據資料上傳,以供機器學習使用。

 

初探機器學習

如之前所述,使用Colab完全不需自行安裝TensorFlow等函式庫,直接import即可。現在我們到工具列File->New Python 3 notebook,產生一個新筆記本ML1.ipynb。接著在工具列Runtime -> Change Runtime Type,選擇VM Hardware accelerator。提供的選項有None(由google 配置)、GPU(圖形處理器) 及TPU(張量處理器Tensor Processing Unit)。其中TPU是專為Google的深度學習框架TensorFlow而設計的人工智慧加速器專用積體電路。參考官方文件得知,目前一個虛擬機可提供最長12小時免費使用。在此我們選擇TPU來執行機器學習範例。 

 

我們考慮下面這組數據集,其實可以很快得到這個關係式 Y = 3X + 1。

那麼該如何訓練神經網絡來完成上述關係式?在此應用了一個最簡單的神經網路模型:僅具有單層神經網路,該層具有1個神經元(units=1),並且其輸入值為單個數據(input_shape=1),也就是X的值,藉此模型來預測Y的值。

 

編譯模型時須給入兩個非常關鍵的函數,它們會決定數據如何變化:

損失函數(loss='mean_squared_error')

優化函數(optimizer='sgd' 就是'stochastic gradient descent' )

 

當機器學習進行訓練時,其中損失函數用來計算這個模型的優劣,之後模型再用優化函數形成新的猜測。本例中,模型會將X不斷帶入Y中並經過100次循環(epochs=100)猜測一個值,然後決定模型的好壞。即使我們現在還不了解數學上的定義也沒關係,因為接下來你會看見真的有用。

 

請加入這段程式碼並執行:

Art editor Img

可以看到輸出結果Train on 6 samples及隨著次數增多,越來越低的loss value。到訓練結束時,loss非常小約等於0.0150,表明我們的模型在推斷數字之間的關係方面做得很好。

 

到此我們先暫停一下,畫張圖:利用線性回歸使用數據點之間的關係,在所有數據點之間畫一條直線。這條線可以用來預測未來值。程式碼如下:

Art editor Img

執行輸出結果如下圖:

 

若X=10.0,我們應該很快就認為Y的值是31,那麼來看看經過學習後機器預測的結果吧。

Art editor Img


 

結果並不是31,而是30.642574,非常接近31。為什麼呢?因為Neural Networks處理的是機率,在這個例子中只有6對數據,模型只能預測有很高的機率會是直線方程Y = 3X + 1,但不一定,所以機器學習將這個不確定性融入預測中。

 

本文從Google Colab環境開始介紹,文章後半段則跟大家一起初探Hello World等級的機器學習。撰文的主因是最近太常看到人工智慧及機器學習等相關新聞及討論,尤其在學完芬蘭的免費AI線上課程後,特別想了解如何寫程式應用或做相關研究。當我們發現Colab可方便使用Python及TensorFlow時,真心覺得應該推廣給每個人。

 

參考

  1. https://www.elementsofai.com/ 芬蘭在2018年推出免費的AI線上課程,目的是教育公民有關新技術的知識。本課程涵蓋AI哲學含意到貝氏概率(Bayesian probability)技術在內,完全沒有程式碼,只需統計學知識。
  2. https://jupyter.org/ Jupyter Notebook
  3. https://codelabs.developers.google.com/codelabs/tensorflow-lab1-helloworld/#0 Learn TensorFlow 1: The "Hello World" of machine learning。
  4. https://www.youtube.com/watch?v=OXNC_sefxi4&list=PLQY2H8rRoyvwr-3IlvJXA1JyOlpcbIGa1&index=1 機器學習簡介