如何向已训练的pybrain ffn网络输入单个数据?
我需要训练一个网络,然后逐个输入测试数据。有没有相关的例子或者文档可以参考呢?
为了实现这个目标,我把训练好的网络进行了序列化,然后用它来处理每一个新进来的数据。
问题是,我在使用_convertToOneOfMany
的时候遇到了崩溃,虽然我理解它的目的(可以从这里了解),但我不太明白它具体是怎么工作的。
对我来说,它的行为不是很确定。我觉得它必须以某种方式理解类别和标签,但我可能漏掉了一些要求。它在处理整个数据集时是有效的,但如果我只随机取一行数据,它就会出问题。
Traceback (most recent call last):
File "ffn_iris.py", line 29, in <module>
tstdata._convertToOneOfMany()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyBrain-0.3-py2.6.egg/pybrain/datasets/classification.py", line 142, in _convertToOneOfMany
newtarg[i, int(oldtarg[i])] = bounds[1]
IndexError: index (2) out of range (0<=index<1) in dimension 1
补充一下:为了更准确地说明我的情况,我想告诉你我正在做什么:我想训练一个网络,使用的是互联网上最著名的神经网络例子——鸢尾花数据集。
大致是这样的:
5.1,3.5,1.4,0.2,0
4.9,3.0,1.4,0.2,0
4.7,3.2,1.3,0.2,0
4.6,3.1,1.5,0.2,0
etc...
最后的零是类别。整个数据集有60行数据,0类20行,1类20行,2类20行。
我读取数据文件并构建数据集:
alldata = ClassificationDataSet(4, class_labels=['Iris-setosa',
'Iris-versicolor',
'Iris-virginica'])
--- loop here ---
alldata.addSample(line[0:4], line[4])
--- create testing and training sets ---
tstdata, trndata = alldata.splitWithProportion(0.7)
--- converted matrixes ---
trndata._convertToOneOfMany()
tstdata._convertToOneOfMany()
--- not important, just for completeness ----
fnn = buildNetwork(trndata.indim, 10, trndata.outdim, outclass=SoftmaxLayer)
trainer = BackpropTrainer(fnn, dataset=trndata,
momentum=0.01, verbose=True,
weightdecay=0.01)
我的问题和_convertToOneOfMany()
有关。当数据集或数据文件只有几条数据(不是60条,且分成三类)时,它就会崩溃,抛出之前提到的异常。
崩溃的数据集示例:
6.5,3.0,5.2,2.0,1
6.5,3.0,5.2,2.0,1
6.2,3.4,5.4,2.3,2
6.5,3.0,5.2,2.0,0
正常工作的数据集示例:
6.5,3.0,5.2,2.0,1
6.2,3.4,5.4,2.3,2
6.5,3.0,5.2,2.0,0
那么convertToOneOfMany()
和数据集中的条目数量或某个类别子集的大小有什么关系呢?一行数据也会崩溃……
1 个回答
0
如果你能多贴一些代码,那可能会更好。关于你的问题,可以去他们的文档看看:http://pybrain.org/docs/quickstart/network.html。简单来说,就是这个命令:net.activate([2, 1])。在这个例子中,网络有两个输入,你输入的值是2和1。我建议你仔细阅读他们的文档。