python有一個很好用的神經網絡庫。雖然sklearn很強大,可是好像對神經網絡的支持並非那麼那好。html
1.安裝python
安裝很方便,項目是一個開源的,託管在github上。若是你用的也是Anconda平臺,那麼在Anconda Prompt的命令行中敲下
git
pip install git+https://github.com/pybrain/pybrain.git@0.3.3github
等一下子就會裝好了。裝好了是這樣的:網絡
而後就能在ide裏面import pybrain了。數據結構
2.創建神經網絡的拓撲結構app
有兩種方式,一種比較簡單,直接指明層的數目就能夠了ide
net = buildNetwork(4, 10, 1)這樣你就創建了一個輸入層爲4個節點,隱藏層爲10個節點,一個輸出節點的神經網絡拓撲結構。
當時,我的仍是建議使用複雜一點的神經網絡創建方法。函數
def netBuild(ds): # net = buildNetwork(4, 10, 1) # 創建神經網絡fnn fnn = FeedForwardNetwork() # 設立三層,一層輸入層(3個神經元,別名爲inLayer),一層隱藏層,一層輸出層 inLayer = LinearLayer(4, name='inLayer') hiddenLayer = SigmoidLayer(13, name='hiddenLayer0') outLayer = LinearLayer(1, name='outLayer') # 將三層都加入神經網絡(即加入神經元) fnn.addInputModule(inLayer) fnn.addModule(hiddenLayer) fnn.addOutputModule(outLayer) # 創建三層之間的鏈接 in_to_hidden = FullConnection(inLayer, hiddenLayer) hidden_to_out = FullConnection(hiddenLayer, outLayer) # 將鏈接加入神經網絡 fnn.addConnection(in_to_hidden) fnn.addConnection(hidden_to_out) # 讓神經網絡可用 fnn.sortModules() print "Trainging" trainer = BackpropTrainer(net, ds,verbose = True, learningrate=0.01) #trainer.train() trainer.trainUntilConvergence(maxEpochs=100) print "Finish training" return fnn上面的代碼,咱們寫了一個函數,這個函數返回了fnn,也就是一個神經網絡結構。在創建了fnn後,其實咱們還作了一個工做,就是訓練。首先咱們是設置了個訓練器traine,verbose=True這一條仍是建議打開的,這樣在訓練的過程當中咱們可以看到當前訓練的狀況。learningrate則是學習率。
最後開啓訓練器,trainer.trainUntilConergence這個函數能夠設置最大的訓練次數。學習
這時候有同窗就要問了,怎麼沒提到數據。訓練的樣本數據是這個函數的參數。
3.訓練樣本def readData(path):
def readData(path): reader = csv.reader(file(path, 'rb')) data = [] for line in reader: data.append((float(line[1]),float(line[2]),float(line[3]),float(line[4]),float(line[0]))) return data咱們的神經網絡四個輸入一個輸出的,因此對於學習樣本就應該有五個記錄。在個人數據中,有五個記錄,也就是五列數據。第一列是結果,後面四列是輸入。
這個函數,傳入的參數path就是文件的路徑。這裏,文件的讀取咱們用了一點點tip。首先是
reader = csv.reader(file(path, 'rb'))這裏,file(path,‘rb’)返回的是一個文件句柄,外面用csv流作一個包裝,而後就能夠很方便的讀取了,源文件的每一行都變成了一個list,list中的元素就是被「,」分開的元素。
def dsBuild(data): ds = SupervisedDataSet(4, 1) for ele in data: ds.addSample((ele[0],ele[1],ele[2],ele[3]), (ele[4])) dsTrain,dsTest = ds.splitWithProportion(0.8) return dsTrain,dsTest有了這樣的數據也不能直接放到神經網絡裏面去訓練。PyBrain有本身的訓練數據結構,固然,說白了就是ndarray。
ds = SupervisedDataSet(4, 1)這裏定義了一個SupervisedData的數據結構,四個輸入,一個輸出。這個數據結構還有一個方法,可以給使用者隨機按比例切割整個數據集,這個方法就是
splitWithProportion()
傳入的參數是分割數據集的比例。如0.8則表示2/8分割。
4.使用神經網絡
dsTrain,dsTest = dsBuild(readData(path)) netModel = netBuild(dsTrain) dsTest = dsTrain #pred=[] for i in range(0,len(dsTest['input'])): error = dsTest['target'][i]-netModel.activate((dsTest['input'][i][0],dsTest['input'][i][1],dsTest['input'][i][2],dsTest['input'][i][3])) print error
最後把上面的函數用起來就能夠了。模型訓練完以後,只要用activate方法,傳入輸入的量,就能夠獲得結果。
5.更多的內容,能夠去官網看哦。
http://www.pybrain.org/docs/index.html
不過彷佛官網乾貨並很少。
本文同步分享在 博客「錢塘小甲子」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。