2015-02-11 113 views
3

我是Pybrain的新手,試圖組合一個神經網絡。首先,我碰到the error described herePybrain神經網絡:_convertToOneOfMany錯誤

AttributeError: 'SupervisedDataSet' object has no attribute '_convertToOneOfMany' 

我試圖在該線程的接受的答案中描述的解決方法。雖然它看起來很有效,但它現在給我一個新的錯誤。這些是我的代碼的相關塊:

將文件讀入分類數據集的部分。 3輸入屬性,2類,拆分讀陣列,前3列「輸入」和最後一個「目標」:

ds = ClassificationDataSet(inp=3, target=1, nb_classes=2) 
tf = open('datafile.txt') 
a = np.loadtxt(tf) 
a = np.hsplit(a, (3,4)) 
ds.setField('input', a[0]) 
ds.setField('target', a[1]) 

即建立一個簡單的網絡,用於pybrain非常標準的部分:

inLayer = SigmoidLayer(3) 
hiddenLayer = SigmoidLayer(5) 
outLayer = SigmoidLayer(2) 

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() 

這是變通方法,如上文所述:

tstdata_temp, trndata_temp = ds.splitWithProportion(0.25) 

tstdata = ClassificationDataSet(3, target=1, nb_classes=2) 
for n in xrange(0, tstdata_temp.getLength()): 
    tstdata.addSample(tstdata_temp.getSample(n)[0], tstdata_temp.getSample(n)[1]) 

trndata = ClassificationDataSet(3, target=1, nb_classes=2) 
for n in xrange(0, trndata_temp.getLength()): 
    trndata.addSample(trndata_temp.getSample(n)[0], trndata_temp.getSample(n)[1]) 

trndata._convertToOneOfMany() 
tstdata._convertToOneOfMany() 

而且這是我第一個轉換行得到的錯誤:

IndexError: index 2 is out of bounds for axis 1 with size 2 

回答

1

我不知道該怎麼看重你的「目標」字段元素都有,但我_convertToOneOfMany()得到了同樣的錯誤分類爲具有從1不是0

_convertToOneOfMany啓動類標籤的結果()將數據集的「目標」字段從大小爲[n_samples,1]的0,1,2等類標籤數組轉換爲大小爲[n_samples,n_classes]的標籤數組,如100,010,001 :0→100,1→010和2→001)。因此,如果您有3個類標記爲1,2和3,_convertToOneOfMany()將執行1-> 010,2-> 001,3->錯誤!

這個函數的代碼在這裏:https://github.com/pybrain/pybrain/blob/master/pybrain/datasets/classification.py,在第144行的類標籤(oldtarg [i])被用作newtarg的列索引。