网络的总误差在100,000次以上的迭代中没有变化。输入是22个值,输出是单个值。输入数组是195,输出数组是195。
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null,true,22));
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,10));
network.addLayer(new BasicLayer(new ActivationSigmoid(),false,1));
network.getStructure().finalizeStructure();
network.reset();
MLDataSet training_data = new BasicMLDataSet(input, target_output);
final Backpropagation train = new Backpropagation(network, training_data);
int epoch = 1;
do {
train.iteration();
System.out.println("Epoch #" + epoch + " Error:" + train.getError());
epoch++;
}
while(train.getError() > 0.01);
{
train.finishTraining();
}这段代码有什么问题?
发布于 2017-01-04 20:34:32
根据您尝试分类的数据,您的网络可能太小,无法将搜索空间转换为线性可分问题。因此,尝试添加更多的神经元或层-这可能需要更长的训练时间。除非它已经是线性可分的,那么NN可能是解决这个问题的一种低效方法。
此外,你也没有训练策略,如果神经网络在误差曲面上陷入局部最小值,它就会卡在那里。请参阅encog用户指南https://s3.amazonaws.com/heatonresearch-books/free/Encog3Java-User.pdf pg 166,其中包含培训策略的列表。
final int strategyCycles = 50;
final double strategyError = 0.25;
train.addStrategy(new ResetStrategy(strategyError,strategyCycles));https://stackoverflow.com/questions/41372465
复制相似问题