【问题标题】:Encog Backpropagation Error not changingEncog反向传播错误没有改变
【发布时间】:2017-05-13 08:26:19
【问题描述】:

网络的总误差在超过 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();
    }

这段代码有什么问题?

【问题讨论】:

    标签: machine-learning artificial-intelligence backpropagation encog feed-forward


    【解决方案1】:

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

    此外,您没有训练策略,如果 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));
    

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 2020-09-02
      • 2015-08-25
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2022-06-15
      • 2013-05-19
      相关资源
      最近更新 更多