我尝试训练网络以对文本进行分类。在入口处,我仅提交一个从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会产生较差的结果。您还应该尝试学习率和动力以帮助达到低错误。
计算时,如果您输入较差或无关的值,则很容易获得负输出。这就是我可以说的,您提供的信息量。