【问题标题】:Encog output have values less that 0Encog 输出的值小于 0
【发布时间】:2019-03-09 11:00:31
【问题描述】:

我尝试训练网络对文本进行分类。在入口处,我只提交了一个来自 0 和 1 的向量。一切正常 :) 注意到 Compute 返回一个负值向量,例如 {0.56, -0.09, -0.01}。可以只有一个负值或多个或没有。

我做错了什么?

输入大小 = 360

输出大小 = 3

        var network = new BasicNetwork();

        network.AddLayer(new BasicLayer(null, true, inputSize));

        network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, inputSize / 6));
        network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, inputSize / 6 / 4));

        network.AddLayer(new BasicLayer(null, false, outputSize));

        network.Structure.FinalizeStructure();
        network.Reset();

Encog 版本 3.4.0

【问题讨论】:

    标签: c# neural-network encog


    【解决方案1】:

    您的网络创建本身很好,尽管建议您在隐藏层中的神经元数量应至少为一半,并且您可能会看到更高的准确度(Bayramet 等人,2013 年) .

    负值通常是导致网络不准确的原因,您可以在训练网络时看到均方误差 (MSe),确保获得最低误差的好方法是:

    //Train network on data set, parameters (Network, dataset, learning rate, momentum).
    IMLTrain learner = new Backpropagation(EncogNetwork, data, lr, mom);
    double lastError = double.PositiveInfinity;
    
    //Training loop while error is decreasing by 0.0000001 or more every 1000 iterations.
    do
    {
         //Set last error as error if the network has trained before.
         if (learner.Error != 0)
         {
             lastError = learner.Error;
         }
    
         //Do 1000 learning iterations.
         int i = 0;
         while (i < 1000)
         {
              learner.Iteration();
              i++;
         }
    
    } while (lastError - learner.Error > 0.0000001);
    
    double error = learner.Error;
    

    这很可能是错误的,即 1.2 会产生糟糕的结果。您还应该尝试学习率和动量,以帮助实现低错误。

    在计算时,如果您输入不良或不相关的值,很容易得到负输出。就您提供的信息量而言,我只能说这些了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 2021-09-27
      相关资源
      最近更新 更多