還差一步之學習神經網路
上次提到了AlphaGo演算法就是蒙特卡洛樹搜索+神經網路,不服輸的陽傻為了戰勝元寶開始了神經網路的自學之路。。。
本次教程中元寶將會介紹神經網路中最基本的一個模型LeNet。本次教程的目的並不是為了讓大家深入的學習神經網路,而是給從沒有接觸過Pytorch環境以及神經網路的人提供一個上手的小例子。
代碼可以從下面地方下載:
這個LeNet在後天的教程中將會成為五子棋AlphaGo演算法中的神經網路部分。
接下來將會介紹:
如何安裝pytorch
MNIST
MNINST是LeCun提供的一個手寫數字數據集。Pytorch提供了下載以及使用MNIST的介面,但為了給大家看到機器學習的底層步驟,在這裡元寶
只是用pytorch來下載數據集,然後把它轉化成常用的numpy來手動來處理MNIST數據。
如何手寫一個神經網路
LeNet由2個卷積層與3個全連接層組成,下面的代碼copy自pytorch的官網教程。
通常來說在一個神經網路的class里,init函數中會定義這個神經網路用到的全部組件,比如conv1, conv2, fc1, fc2, fc3。 在forward函數中來定義網路結構比如這裡是兩層卷積,三層全連接。
訓練模型
在機器學習中經常會用到mini-bach,它的意思是我們每次隨機的取batch_size個數據一起訓練。這樣子局部的取平均可以加速我們的訓練。下面是我手寫的一個隨機取batch_size個數據的過程。它通過函數隨機的取得一個樣本,並把它加入到中。每當我們有batch_size個數據,我們調用函數來訓練這些數據。
注意到其中我們使用了一個函數,這個通知模型我們要開始訓練了,在使用dropout和batch_normalization中這一步是關鍵的。由於LeNet中並沒有dropout和batch_normalization所以這一步不是很關鍵,但這種書寫方式是一種良好的Pytorch習慣。
接下來的函數會幫助我們訓練一個batch的數據。
訓練過程由四部分組成:
檢驗模型
為了檢驗模型只要在驗證數據集上跑一邊就可以啦,很簡單的。
TAG:全球大搜羅 |