0

网络的总错误在超过100,000次迭代中没有变化。 输入是22个值,输出是单个值。输入数组是[195] [22],输出数组是[195] [1]。Encog反向传播错误不变

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(); 
    } 

这段代码有什么问题?

回答

0

根据您尝试对网络进行分类的数据可能太小而无法将搜索空间转换为可线性分离的问题。因此,请尝试添加更多的神经元或图层 - 这可能需要更长的时间来训练。除非它已经是线性分离的,然后NN可能是解决这个问题的低效方法。

此外,您还没有训练策略,如果NN落入误差曲面上的局部最小值,它将会停留在那里。请参阅encog用户指南https://s3.amazonaws.com/heatonresearch-books/free/Encog3Java-User.pdf第166页有一个培训策略列表。

final int strategyCycles = 50; 
final double strategyError = 0.25; 
train.addStrategy(new ResetStrategy(strategyError,strategyCycles));