PyBrain-Python的人工神經網絡

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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索