完全雲端運行:使用谷歌CoLaboratory訓練神經網絡

 2017-12-31 12:00:00.0

原標題:入門 | 完全雲端運行:使用谷歌CoLaboratory訓練神經網絡

選自Medium

作者:Sagar Howal

Colaboratory 是一個 Google 研究項目,旨在幫助傳播機器學習培訓和研究成果。它是一個 Jupyter 筆記本環境,不需要進行任何設置就可以使用,並且完全在雲端運行。Colaboratory 筆記本存儲在 Google 雲端硬盤 (https://drive.google.com/) 中,並且可以共享,就如同您使用 Google 文檔或表格一樣。Colaboratory 可免費使用。本文介紹如何使用 Google CoLaboratory 訓練神經網絡。

工具鏈接:https://colab.research.google.com/

谷歌近期上線了協作寫代碼的內部工具 Google CoLaboratory。Colaboratory 是一個 Google 研究項目,旨在幫助傳播機器學習培訓和研究成果。它是一個 Jupyter 筆記本環境,不需要進行任何設置就可以使用,並且完全在雲端運行。

Colaboratory 筆記本存儲在 Google 雲端硬盤 (https://drive.google.com/) 中,並且可以共享,就如同您使用 Google 文檔或表格一樣。Colaboratory 可免費使用。

CoLaboratory

首先,訪問 CoLaboratory 網站(http://g.co/colab),註冊後接受使用該工具的邀請。確認郵件通常需要一天時間才能返回你的郵箱。CoLaboratory 允許使用谷歌虛擬機執行機器學習任務和構建模型,無需擔心計算力的問題,而且它是免費的。

打開 CoLaboratory,會出現一個「Hello, Colaboratory」文件,包含一些基本示例。建議嘗試一下。

使用 CoLaboratory 可以在 Jupyter Notebook 上寫代碼。寫好後執行 (Shift + Enter),代碼單元下方就會生成輸出。

除了寫代碼,CoLaboratory 還有一些技巧(trick)。你可以在 notebook 中 shell 命令前加上「!」。如:!pip install -q keras。這樣你就可以很大程度上控制正在使用的谷歌虛擬機。點擊左上方(菜單欄下)的黑色按鈕就可以找到它們的代碼片段。

本文旨在展示如何使用 CoLaboratory 訓練神經網絡。我們將展示一個在威斯康星乳腺癌數據集上訓練神經網絡的示例,數據集可在 UCI Machine Learning Repository(http://archive.ics.uci.edu/ml/datasets)獲取。本文的示例相對比較簡單。

本文所用的 CoLaboratory notebook 鏈接:https://colab.research.google.com/notebook#fileId=1aQGl_sH4TVehK8PDBRspwI4pD16xIR0r

深度學習

深度學習是一種機器學習技術,它使用的計算技術一定程度上模仿了生物神經元的運行。各層中的神經元網絡不斷將信息從輸入傳輸到輸出,直到其權重調整到可以生成反映特徵和目標之間底層關係的算法。

要想更多地瞭解神經網絡,推薦閱讀這篇論文《Artificial Neural Networks for Beginners》(https://arxiv.org/pdf/cs/0308031.pdf)。

代碼

問題:研究者獲取乳房腫塊的細針穿刺(FNA),然後生成數字圖像。該數據集包含描述圖像中細胞核特徵的實例。每個實例包括診斷結果:M(惡性)或 B(良性)。我們的任務是在該數據上訓練神經網絡根據上述特徵診斷乳腺癌。

打開 CoLaboratory,出現一個新的 untitled.ipynb 文件供你使用。

谷歌允許使用其服務器上的一臺 linux 虛擬機,這樣你可以訪問終端爲項目安裝特定包。如果你只在代碼單元中輸入 !ls 命令(記得命令前加!),那麼你的虛擬機中會出現一個 datalab 文件夾。

我們的任務是將數據集放置到該機器上,這樣我們的 notebook 就可以訪問它。你可以使用以下代碼:

  1. #Uploading the Dataset

  2. fromgoogle.colab importfiles

  3. uploaded = files.upload()

  4. #Save uploaded file on the Virtual Machine's

  5. #Thanks to user3800642 from StackOverflow

  6. withopen("breast_cancer.csv", 'w') asf:

  7. f.write(uploaded[uploaded.keys()[0]])

輸入 !ls 命令,檢查機器上是否有該文件。你將看到 datalab 文件夾和 breast_cancer_data.csv 文件。

數據預處理:

現在數據已經在機器上了,我們使用 pandas 將其輸入到項目中。

  1. importnumpy asnp

  2. importpandas aspd

  3. #Importing dataset

  4. dataset = pd.read_csv('breast_cancer.csv')

  5. #Check the first 5 rows of the dataset.

  6. dataset.head(5)

CoLaboratory 上的輸出結果圖示。

現在,分割因變量(Dependent Variables)和自變量(Independent Variables)。

  1. #Seperating dependent and independent variables.

  2. X = dataset.iloc[:, 2:32].values #Note: Exclude Last column with all NaN values.

  3. y = dataset.iloc[:, 1].values

Y 包含一列,其中的「M」和「B」分別代表「是」(惡性)和「否」(良性)。我們需要將其編碼成數學形式,即「1」和「0」。可以使用 Label Encoder 類別完成該任務。

  1. #Encoding Categorical Data

  2. fromsklearn.preprocessing importLabelEncoder

  3. labelencoder = LabelEncoder()

  4. y = labelencoder.fit_transform(y)

(如果數據類別多於兩類,則使用 OneHotEncoder)

現在數據已經準備好,我們將其分割成訓練集和測試集。在 Scikit-Learn 中使用 train_test_split 可以輕鬆完成該工作。

  1. #Splitting into Training set and Test set

  2. fromsklearn.model_selection importtrain_test_split

  3. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)

參數 test_size = 0.2 定義測試集比例。這裏,我們將訓練集設置爲數據集的 80%,測試集佔數據集的 20%。

Keras

Keras 是一種構建人工神經網絡的高級 API。它使用 TensorFlow 或 Theano 後端執行內部運行。要安裝 Keras,必須首先安裝 TensorFlow。CoLaboratory 已經在虛擬機上安裝了 TensorFlow。使用以下命令可以檢查是否安裝 TensorFlow:

!pip show tensorflow

你還可以使用!pip install tensorflow==1.2,安裝特定版本的 TensorFlow。

另外,如果你更喜歡用 Theano 後端,可以閱讀該文檔:https://keras.io/backend/。

安裝 Keras:

!pip install -q keras

  1. # Importing the Keras libraries and packages

  2. importkeras

  3. fromkeras.models importSequential

  4. fromkeras.layers importDense

使用 Sequential 和 Dense 類別指定神經網絡的節點、連接和規格。如上所示,我們將使用這些自定義網絡的參數並進行調整。

爲了初始化神經網絡,我們將創建一個 Sequential 類的對象。

  1. # Initialising the ANN

  2. classifier = Sequential()

現在,我們要來設計網絡。

對於每個隱藏層,我們需要定義三個基本參數:units、kernel_initializer 和 activation。units 參數定義每層包含的神經元數量。Kernel_initializer 定義神經元在輸入數據上運行時的初始權重(詳見 https://faroit.github.io/keras-docs/1.2.2/initializations/)。activation 定義數據的激活函數。

注意:如果現在這些項非常大也沒事,很快就會變得更加清晰。

第一層:

16 個具備統一初始權重的神經元,激活函數爲 ReLU。此外,定義參數 input_dim = 30 作爲輸入層的規格。注意我們的數據集中有 30 個特徵列。

Cheat:

我們如何確定這一層的單元數?人們往往會說這需要經驗和專業知識。對於初學者來說,一種簡單方式是:x 和 y 的總和除以 2。如 (30+1)/2 = 15.5 ~ 16,因此,units = 16。

第二層:第二層和第一層一樣,不過第二層沒有 input_dim 參數。

輸出層:由於我們的輸出是 0 或 1,因此我們可以使用具備統一初始權重的單個單元。但是,這裏我們使用 sigmoid 激活函數。

  1. # Adding the input layer and the first hidden layer

  2. classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu', input_dim = 30))

  3. # Adding the second hidden layer

  4. classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu'))

  5. # Adding the output layer

  6. classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

  7. # Compiling the ANN

  8. classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

擬合:

運行人工神經網絡,發生反向傳播。你將在 CoLaboratory 上看到所有處理過程,而不是在自己的電腦上。

  1. # Fitting the ANN to the Training set

  2. classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

這裏 batch_size 是你希望同時處理的輸入量。epoch 指數據通過神經網絡一次的整個週期。它們在 Colaboratory Notebook 中顯示如下:

進行預測,構建混淆矩陣。

  1. # Predicting the Test set results

  2. y_pred = classifier.predict(X_test)

  3. y_pred = (y_pred > 0.5)

  4. # Making the Confusion Matrix

  5. fromsklearn.metrics importconfusion_matrix

  6. cm = confusion_matrix(y_test, y_pred)

訓練網絡後,就可以在 X_test set 上進行預測,以檢查模型在新數據上的性能。在代碼單元中輸入和執行 cm 查看結果。

混淆矩陣

混淆矩陣是模型做出的正確、錯誤預測的矩陣表徵。該矩陣可供個人調查哪些預測和另一種預測混淆。這是一個 2×2 的混淆矩陣。

混淆矩陣如下所示。[cm (Shift+Enter)]

上圖表示:70 個真負類、1 個假正類、1 個假負類、42 個真正類。很簡單。該平方矩陣的大小隨着分類類別的增加而增加。

這個示例中的準確率幾乎達到 100%,只有 2 個錯誤預測。但是並不總是這樣。有時你可能需要投入更多時間,研究模型的行爲,提出更好、更復雜的解決方案。如果一個網絡性能不夠好,你需要調整超參數來改進模型。

希望本文可以幫助你開始使用 Colaboratory。該教程的 Notebook 地址:https://colab.research.google.com/notebook#fileId=1aQGl_sH4TVehK8PDBRspwI4pD16xIR0r

原文鏈接:https://medium.com/@howal/neural-networks-with-google-colaboratory-artificial-intelligence-getting-started-713b5eb07f14


文章來源:機器之心