PyBrain多个目标值
我正在尝试训练一个人工神经网络(ANN),目的是预测一张图片属于多个类别的概率,而我的目标值就是这些概率的集合。
输入的数据是简单处理过的28x28的灰度图片,像素值范围是0到255。
一个“目标”看起来像这样:0.738832,0.238159,0.023009,0,0.238159,0,0.238159,0,0.238159,0,0,0.238159,0,0.19793,0.80207,0.066806667,0.663691308,0.008334764,0,0,0.0494825,0.098965,0.0494825,0,0,0,0,0,0,0,0,0,0,0,0,0,0
但是我得到的结果非常糟糕(远远不如简单的线性回归),看起来像这样:0.011947,0.448668,0,0,0.095688,0,0.038233,0,0,0,0,0,0,0,0.405464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
无论我使用300张图片还是30000张图片,结果都差不多。我显然做错了什么,非常希望能得到一些建议。
代码:
# create dataset
DS = SupervisedDataSet(784, 37)
assert(ia.shape[0] == ta.shape[0])
DS.setField('input', ia)
DS.setField('target', ta)
fnn = buildNetwork( DS.indim, 200, 37, outclass=SoftmaxLayer )
trainer = BackpropTrainer( fnn, dataset=DS, momentum=0.1, verbose=True, weightdecay=0.01)
trainer.trainUntilConvergence(maxEpochs=10,verbose=True,validationProportion=0.20)
1 个回答
1
你的问题出在你用来训练的数据值上。一个softmax层的意思是,这一层的所有值加起来必须等于1。所以当你设置了37个输出维度时,这意味着这37个维度的值加起来要等于1.0。但是你提供的样本目标似乎没有遵循这个规则。