Encog输出的值较小



我尝试训练网络以对文本进行分类。在入口处,我仅提交一个从0和1提交矢量。一切都很好:)注意到计算返回一个负值向量,例如{0.56,-0.09,-0.01}。只能有一个负值或几个或没有。

我在做什么错?

inputsize = 360

outputsize = 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会产生较差的结果。您还应该尝试学习率和动力以帮助达到低错误。

计算时,如果您输入较差或无关的值,则很容易获得负输出。这就是我可以说的,您提供的信息量。

最新更新