首页 > 解决方案 > Encog 输出的值小于 0

问题描述

我尝试训练网络对文本进行分类。在入口处,我只提交了一个来自 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-networkencog

解决方案


您的网络创建本身很好,尽管建议您在隐藏层中的神经元数量至少应为一半,并且您可能会看到更高的准确度(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 中的错误很可能会产生较差的结果。您还应该尝试学习率和动量,以帮助实现低错误。

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


推荐阅读