我是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
答案 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的列索引。