Python 肾盂脑萎缩
我正试图为100个样本建立一个代理模型。我有两个输入和两个响应,它们都用各自的最大值的大小进行了归一化 正常化:Python 肾盂脑萎缩,python,neural-network,pybrain,Python,Neural Network,Pybrain,我正试图为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.appen
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时,人工神经网络能做得好吗?对于这样一个复杂的网络,样本太少了 您的网络从输入到隐藏层将有2*17=34个连接,从隐藏层到输出将有17*2=34个连接,从偏置单元将有17+2=19个连接。这意味着您需要调整87个参数 如果您使用70%的样本数据训练数据,并使用30%的样本数据进行交叉验证和测试,那么您将获得84个“已知”值。当已知值的数量接近(甚至低于)参数的数量时,神经网络很容易过度拟合,使其与训练数据完美匹配(非常低的训练误差),但对其他数据无效
您需要一个不太复杂的网络或更多的样本。您的培训和测试数据是什么样的?