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 会产生糟糕的结果。您还应该试验学习率和动量以帮助实现低错误。
计算时,如果输入的值不佳或不相关,很容易得到负输出。鉴于您提供的信息量,我只能说这么多了。
我尝试训练网络对文本进行分类。在入口处,我仅提交一个来自 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 会产生糟糕的结果。您还应该试验学习率和动量以帮助实现低错误。
计算时,如果输入的值不佳或不相关,很容易得到负输出。鉴于您提供的信息量,我只能说这么多了。