Encog 输出的值小于 0

Encog output have values less that 0

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

我做错了什么?

输入大小=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

您的网络创建本身没问题,但建议您隐藏层中的神经元数量至少应为一半,并且您可能会看到更高的精度(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 会产生糟糕的结果。您还应该试验学习率和动量以帮助实现低错误。

计算时,如果输入的值不佳或不相关,很容易得到负输出。鉴于您提供的信息量,我只能说这么多了。