1. 程式人生 > >Pybrain學習筆記-2 pybrain快速入門

Pybrain學習筆記-2 pybrain快速入門

Pybrain學習筆記-2 Pybrain快速入門

注:原創博文,轉載請註明出處:http://blog.csdn.net/m0_37887016

一、安裝pybrain模組

1.安裝numpy

2.安裝scipy

3.安裝pybrain

      Pybrain模組的安裝首先依賴numpy和scipy,確保在安裝之前,你已經安裝了這兩個模組,模組的安裝辦法可以參靠我的博文“Python模組的安裝

 二、快速入門

 1.建立神經網路

     要快速啟動快速入門,只需啟動Python,我們將在翻譯器中完成所有操作(我用的IDE是eclipse+anaconda+Python2.7,當然也可以直接在控制檯進行測試):

 在PyBrain中,網路由互相關聯的模組和連線組成。你可以將網路視為有向非迴圈圖,其中節點為模組,邊緣為連線。 這使得PyBrain非常靈活,當然,這種結構不是在所有情況下都是必須的。

建立神經網路的快捷方式

因此,有一種建立網路的簡單方法,即buildNetwork快捷方式:

此呼叫返回一個具有兩個輸入,三個隱藏和單個輸出神經元的網路。 在PyBrain中,這些圖層是Module物件,它們已經連線到FullConnection物件。

啟用網路

網路已經用隨機值初始化 - 我們已經可以計算出其輸出值:

為此,我們使用.activate()方法,它期望一個列表,元組或陣列作為輸入。

檢查結構

我們如何檢查網路的結構呢? 在PyBrain中,網路的每個部分都有一個可以訪問它的名稱。使用buildNetwork快捷方式構建網路時,這些部分將自動命名:

隱藏層最後有數字,主要是與一些其他的關鍵字起到區別的作用。

更復雜的網路

當然,我們希望在建立網路時有更大的靈活性。 例如,預設情況下,隱藏層被構造為S形擠壓函式:但是在很多情況下,這不是我們想要的。 我們也可以提供不同型別的圖層:

我們還能做更多改動,比如,我們同樣可以給輸出層設定不同的類:

我們也可以告訴網路使用偏置值:

這種方法當然有一些限制:例如,我們只能構建前饋拓撲。但是可以使用PyBrain建立非常複雜的架構,這也是“pybrain使用說明書”的優勢之一。

2.構造資料集

     為了讓我們的網路學習任何東西,我們需要一個包含輸入和目標的資料集。 PyBrain的pybrain.dataset包解決了這個問題,我們將使用SupervisedDataSet類來實現這樣的功能。

一個定製的資料集

      SupervisedDataSet類用於標準監督學習。 它支援輸入和目標值,我們必須在物件建立時指定它們的大小:

    這裡我們生成了一個支援二維輸入和一維標註資訊的資料集。

加入例項

    神經網路訓練的典型例子是XOR函式,所以我們為此建立一個數據集。 我們可以通過將樣本新增到資料集來實現:

檢查資料集

    我們現在已經有了一個數據集,其中有4個樣本。 我們可以用python的慣用方式來檢查一下資料集的大小:print len(ds)

我們自然也可以用迭代的方式來檢視這個資料集:for inpt , target in ds:

    我們可以直接訪問輸入和目標欄位陣列: ds[‘input’] , ds[‘target’]

    也可以再次清除資料集,並從中刪除所有值: ds.clear

3.在資料集上訓練神經網路

    為了調整監督學習中的模組引數,PyBrain內建一個訓練器。 訓練器的引數分別是一個神經網路模型和一個數據集,訓練神經網路模型以適應資料集中的資料。

訓練神經網路的典型方法是誤差反向傳播演算法。 PyBrain當然有反向傳播,我們將在這裡使用BackpropTrainer(誤差反向傳播訓練器):

    我們已經為XOR建立了一個數據集,我們也學會了構建可以處理這些問題的網路。 讓我們用訓練器BackpropTrainer將二者聯絡起來,然後呼叫train()方法來對網路進行訓練。

單獨呼叫train()方法只能訓練一個完整時期的網路,並返回一個誤差值。

    如果我們要訓練網路直到網路收斂,還有另一種方法trainUntilConvergence(),方法名字很好記,“訓練直到收斂”這返回一大堆資料,包含每個訓練週期的誤差元組。而且會發現誤差陣列的每個元素是逐漸減小的,說明網路逐漸收斂。

下面貼出三個模組的程式碼,實測可用:

1.test_pybrian_1

#!usr/bin/env python
#_*_coding:utf-8_*_
'''
Created on 2017年4月13日
Topic:Building a Network
@author: Stuart斯圖爾特
'''

from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer
from pybrain.structure import  SoftmaxLayer
from pybrain.datasets import SupervisedDataSet
#構建一個神經網路,簡單的進行啟用並列印各層的名稱資訊
net = buildNetwork(2,3,1)
print net.activate([2,1])
print "net['in'] = " , net['in']
print "net['hidden0'] = " , net['hidden0']
print "net['out'] = " , net['out']

#自定義複雜網路,把神經網路的預設隱含層引數設定為Tanh函式而不是Sigmoid函式
#from pybrain.structure import TanhLayer
net = buildNetwork(2,3,1,hiddenclass = TanhLayer)
print "net['hidden0_1'] = " , net['hidden0']

#自定義複雜網路,修改輸出層的型別
#from pybrain.structure import  SoftmaxLayer
net = buildNetwork(2,3,2,hiddenclass = TanhLayer,outclass = SoftmaxLayer)
print net.activate((2,3))

net = buildNetwork(2,3,1,bias = True)
print net['bias']

2.test_pybrain_2

#!usr/bin/env python
#_*_coding:utf-8_*_
'''
Created on 2017年4月14日
Topic:Building a Dataset
@author: Stuart斯圖爾特
'''
from pybrain.datasets import SupervisedDataSet
from pybrain.datasets import UnsupervisedDataSet

ds = SupervisedDataSet(2,1)

ds.addSample((0,0), (0,))
ds.addSample((0,1), (1,))
ds.addSample((1,0), (1,))
ds.addSample((1,1), (0,))
print '檢查資料集的長度'
print len (ds)    
print'用for迴圈迭代的方式訪問資料集'
for inpt,target in ds:
    print inpt,target
print '直接訪問輸入欄位和標記欄位的陣列'
print ds['input']
print ds['target']
print '清除資料集'
#ds.clear()
#print ds['input']
#print ds['target']

3.test_pybrian_3

#!usr/bin/env python
#_*_coding:utf-8_*_
'''
Created on 2017年4月14日
Topic:Training your Network on your Dataset
@author: Stuart斯圖爾特
'''
#引入建立神經網路所需的相關模組
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer

#引入建立資料集所需的相關模組
from pybrain.datasets import SupervisedDataSet

#引入BackpropTrainer反向訓練器
from pybrain.supervised.trainers import BackpropTrainer

#引入之前建好的建立資料集中的module
from my_pybrain import test_pybrain_2    #my_pybrain是包名,test_pybrain_2是module名
#import test_pybrain_2
'''
ds = SupervisedDataSet(2,1)
ds.addSample((0,0), (0,))
ds.addSample((0,1), (1,))
ds.addSample((1,0), (1,))
ds.addSample((1,1), (0,))
'''
net = buildNetwork(2,3,1,bias = True,hiddenclass=TanhLayer)
trainer = BackpropTrainer(net,test_pybrain_2.ds)    #應用之前建立的ds資料集
#通過呼叫train()方法來對網路進行訓練
print trainer.train()
#通過呼叫trainUntilConvertgence()方法對網路訓練直到收斂
print trainer.trainUntilConvergence()

      至此,利用pybrain建立簡單的神經絡、建立有監督資料集、訓練神經網路的基本操作與模組已經大致瞭解了,後續將進一步對pybrain的功能進行學習,如建立更明確的前饋神經網路模型,以及利用pybrian進行分類任務。

      Ps:程式小猿,個人能力和表達能力有限,如有錯誤歡迎指正交流。碼字不易,轉載請註明出處(筆芯)。