Pybrain神经网络:_convertToOneOfMany错误

时间:2015-02-11 11:38:21

标签: python machine-learning pybrain

我是Pybrain的新手,并试图组建一个神经网络。首先,我遇到了the error described here

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 个答案:

答案 0 :(得分:1)

我不知道你的目标'字段元素有,但是由于类标签从1开始而不是0,我在_convertToOneOfMany()中得到了同样的错误。

_convertToOneOfMany()转换'目标'数据集的字段,从大小为[n_samples,1]的0,1,2类标签数组到大小为[0_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的列索引。