0

网络的总误差在超过 100,000 次迭代中没有改变。输入是 22 个值,输出是单个值。输入数组是[195][22],输出数组是[195][1]。

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

这段代码有什么问题?

4

1 回答 1

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));
于 2017-01-04T12:34:31.603 回答