選自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 就可以訪問它。你可以使用以下代碼:
#Uploading the Dataset
fromgoogle.colab importfiles
uploaded = files.upload()
#Save uploaded file on the Virtual Machine's
#Thanks to user3800642 from StackOverflow
withopen("breast_cancer.csv", 'w') asf:
f.write(uploaded[uploaded.keys()[0]])
輸入 !ls 命令,檢查機器上是否有該文件。你將看到 datalab 文件夾和 breast_cancer_data.csv 文件。
數據預處理:
現在數據已經在機器上了,我們使用 pandas 將其輸入到項目中。
importnumpy asnp
importpandas aspd
#Importing dataset
dataset = pd.read_csv('breast_cancer.csv')
#Check the first 5 rows of the dataset.
dataset.head(5)
CoLaboratory 上的輸出結果圖示。
現在,分割因變量(Dependent Variables)和自變量(Independent Variables)。
#Seperating dependent and independent variables.
X = dataset.iloc[:, 2:32].values #Note: Exclude Last column with all NaN values.
y = dataset.iloc[:, 1].values
Y 包含一列,其中的「M」和「B」分別代表「是」(惡性)和「否」(良性)。我們需要將其編碼成數學形式,即「1」和「0」。可以使用 Label Encoder 類別完成該任務。
#Encoding Categorical Data
fromsklearn.preprocessing importLabelEncoder
labelencoder = LabelEncoder()
y = labelencoder.fit_transform(y)
(如果數據類別多於兩類,則使用 OneHotEncoder)
現在數據已經準備好,我們將其分割成訓練集和測試集。在 Scikit-Learn 中使用 train_test_split 可以輕鬆完成該工作。
#Splitting into Training set and Test set
fromsklearn.model_selection importtrain_test_split
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
# Importing the Keras libraries and packages
importkeras
fromkeras.models importSequential
fromkeras.layers importDense
使用 Sequential 和 Dense 類別指定神經網絡的節點、連接和規格。如上所示,我們將使用這些自定義網絡的參數並進行調整。
爲了初始化神經網絡,我們將創建一個 Sequential 類的對象。
# Initialising the ANN
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 激活函數。
# Adding the input layer and the first hidden layer
classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu', input_dim = 30))
# Adding the second hidden layer
classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu'))
# Adding the output layer
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
# Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
擬合:
運行人工神經網絡,發生反向傳播。你將在 CoLaboratory 上看到所有處理過程,而不是在自己的電腦上。
# Fitting the ANN to the Training set
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)
這裏 batch_size 是你希望同時處理的輸入量。epoch 指數據通過神經網絡一次的整個週期。它們在 Colaboratory Notebook 中顯示如下:
進行預測,構建混淆矩陣。
# Predicting the Test set results
y_pred = classifier.predict(X_test)
y_pred = (y_pred > 0.5)
# Making the Confusion Matrix
fromsklearn.metrics importconfusion_matrix
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