我是 Pybrain 的新手,正在尝试构建一个神经网络。首先,我遇到了the error described here :
AttributeError: 'SupervisedDataSet' object has no attribute '_convertToOneOfMany'
我尝试了该线程的已接受答案中描述的解决方法。虽然它看起来有效,但它现在给了我一个新的错误。这些是我的代码的相关 block :
将文件读入分类数据集的部分。 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 开始,我在 _convertToOneOfMany() 中遇到了同样的错误。
_convertToOneOfMany() 将数据集的“目标”字段从类标签数组(如大小为 [n_samples,1] 的 0、1、2)转换为标签数组(如大小为 [n_samples, 100、010、001, 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 的列索引。
关于python - Pybrain 神经网络 : _convertToOneOfMany error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453408/