零基礎小白學python,大牛三步教你做python神經網路!
零基礎,手把手教你第一個神經網路,只需三步!
這篇文章只是為你掃清障礙
程式碼還是要自己打一遍,才會發現各種報錯。
引數要自己除錯一遍。才能體會神經網路的神奇。
注意:需要學習資料視訊書籍的;
新增小編學習交流群943752371即可。
準備工作:
1、第一個人工神經網路實現目標:
識別數字,讓計算機學會識別如下數字
,
2、資料集:
https://pjreddie.com/projects/mnist-in-csv/
需要下載train set和test set兩個資料集。
資料分析:每一行代表一個手寫數字。每行第一列是這個數字的值,從第二列開始代表畫素值。
3、程式語言python,程式設計工具:jupyter notebook
安裝免費的anaconda,安裝後開啟jupyter notebook會跳出網頁,在網頁對話方塊裡輸入語句。
神經網路原理:
參見之前的文章。吳恩達教你入門神經網路 - 今宵的文章 - 知乎
https://zhuanlan.zhihu.com/p/49854976
正式動手:
把大象裝冰箱需要幾步?只需三步!
一、搭建模型
1、python程式設計通用第一步:引入各種需要的庫
這裡只需要3個庫。Numpy是數值計算必備庫,scipy是需要呼叫裡面一個函式,matplotlib是畫相簿
import numpy
import scipy.special
import matplotlib.pyplot
%matplotlib inline
2、模型框架:三個函式寫出神經網路框架
def init(self,inputnodes,hiddennodes,outputnodes,learningrate):設定神經網路引數,包含輸入層節點數、隱藏節點數、輸出層節點數和學習率
注意init左右2邊是2條下劃線,python裡叫魔法方法,某些情況下會自動呼叫這個函式。
def train(self,inputs_list,targets_list):——訓練函式,輸入和輸出2個引數
def query(self,inputs_list):——查詢函式,輸入1個引數
3、 補全函式:給函式寫具體功能。參見具體語句。
二、 訓練模型
1、 設定神經網路引數
寫出語句只是開始,調引數才是神經網路的重點,通過調整引數,可以讓模型結果更好
可以實驗不同的節點數、學習率,看看正確率會怎麼改變,感受引數的改變對模型輸出結果的影響。
2、訓練資料匯入
第一次匯入時可以選取小一點的資料集,比如1000個數據,原始資料匯入跑一次要花10多分鐘,不方便除錯。
可以用len() 語句檢視匯入語句是否成功,匯入了多少行語句。
我匯入語句比較順利,匯入失敗可能是檔名寫錯(比如沒寫字尾),或者資料夾放的不對。
3、 用資料訓練神經網路
耗時較長,還看不到結果,要耐心等待。
三、測試模型
1、測試資料匯入:
這裡訓練資料和測試資料要分開,否則訓練出神經網路起不到作用。就像平時做作業都對,但考試時不一定考出高分。考的內容要和平時作業不一樣才能驗證水平。
2、 附加:檢視神經網路訓練結果和實際資料的區別
這一步是最有成就感的一步。
看看圖片是什麼資料,神經網路判斷是什麼數字。這裡神經網路輸出10個數字,從0開始算,拿個數字最大表示判斷是拿個數。比如這張圖,第6個數據最大,表示神經網路判斷這個數字是5(因為從0開始算)。
3、 如何檢視神經網路的正確率?
用迴圈算出每個值和正確值比較
我這個模型的正確率是88.8%,1000個數據訓練出的正確率還可以。可以用全量30000個數據再訓練一次,最高的正確率是95%
4、 後續玩法
可以檢視哪個數神經網路判斷錯了:比如這張圖是5,神經網路判斷為1了,可以看到輸出結果比較接近,1的數值比5大了一點點。神經網路判斷這個影象1、像2又像5。
可以嘗試改變各種引數,追求最大的正確率,並畫出引數和正確率的關係。
可以嘗試自己手寫一個數字,把資料畫素化,讓神經網路判斷
附:完整程式碼參見https://github.com/makeyourownneuralnetwork/makeyourownneuralnetwork
參考文獻:《python神經網路程式設計》
如果覺得有用,請點個贊,讓我知道寫的對你有幫助。