我正试图为100个样本建立一个代孕模型。我有两个输入和两个响应,它们都按照各自最大值的大小正常化。
正常化:
for i in range(0, len(array(self.samples)[0])):
self.max_samples.append(abs(self.samples[:,i].max()))
self.samples[:,i] /= self.max_samples[-1]
self.minmax_samples.append([self.samples[:,i].min(), self.samples[:,i].max()])
for i in range(0, len(array(self.targets)[0])):
self.max_targets.append(abs(self.targets[:,i].max()))
self.targets[:,i] /= self.max_targets[-1]该网络的建立方式如下:
self.ANN = FeedForwardNetwork(bias = True)
inLayer = TanhLayer(len(array(self.samples[0])[-1]))
hiddenLayer = TanhLayer(17)
outLayer = LinearLayer(len(array(self.targets[0])[-1]))
self.ANN.addInputModule(inLayer)
self.ANN.addModule(hiddenLayer)
self.ANN.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
self.ANN.addConnection(in_to_hidden)
self.ANN.addConnection(hidden_to_out)
self.ANN.sortModules()
self.DataSet = SupervisedDataSet(len(array(self.samples[0])[-1]),len(array(self.targets[0])[-1]))
"Adding training points"
for i, j in zip(self.samples, self.targets):
self.DataSet.appendLinked(i, j)
trainer = BackpropTrainer( self.ANN, dataset=self.DataSet, momentum=0.99, learningrate = 0.1, verbose=True, weightdecay=0.1)
trainer.trainOnDataset(self.DataSet, 200)训练器产生的总误差为1e-2级。我想会更好的。神经网络所产生的响应完全不接近预期值。
我用的数据点太少了吗?当我们有一个超过20维的输入向量和多个响应(> 5)时,当可以生成的样本点数在120以下时,人工神经网络做得好吗?
发布于 2016-01-18 17:00:40
对于如此复杂的网络,您的示例太少了。
您的网络将有从输入到隐藏层的2*17=34连接,从隐藏层到输出的17*2=34连接和来自偏置单元的17+2=19连接。这意味着您有87个参数可调。
如果你用70%的样本数据训练你的数据,并使用30%的样本数据进行交叉验证和测试,那么你就得到了84个“已知”值。当已知值的数量与(甚至低于)参数数相似(甚至低于)时,您的神经网络可以很容易地对参数进行过拟合,从而使其与训练数据完全匹配(非常低的训练误差),但在其他数据中将是无用的。
你需要一个不那么复杂的网络或者更多的样本。
https://stackoverflow.com/questions/34833582
复制相似问题