Pybrain神经网络:_convertToOneOfMany错误

3

我是Pybrain的新手,正在尝试组建一个神经网络。首先,我遇到了这里描述的错误

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

我尝试了那个帖子中所描述的解决方法。虽然它似乎可以工作,但现在它给我一个新的错误。以下是我的代码的相关部分:

读取文件并将其转换为分类数据集的部分。有3个输入属性,2个类别,将读取的数组分割成两部分,前三列放入“input”,最后一列放入“target”:

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个回答

1
我不知道你的“目标”字段元素具有什么值,但是如果类标签从1而不是0开始,则使用_convertToOneOfMany()会得到相同的错误。_convertToOneOfMany()将数据集的“目标”字段从大小为[n_samples,1]的类标签数组(如0、1、2)转换为大小为[n_samples,n_classes]的标签数组(因此它执行以下操作: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的列索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接