c# - 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
解决方案
您的网络创建本身很好,尽管建议您在隐藏层中的神经元数量至少应为一半,并且您可能会看到更高的准确度(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 中的错误很可能会产生较差的结果。您还应该尝试学习率和动量,以帮助实现低错误。
在计算时,如果您输入不良或不相关的值,很容易得到负输出。就您提供的信息量而言,这就是我所能说的。
推荐阅读
- r - 向量上的 paste() 给出了不需要的空格,如何删除它?
- azure-devops - VSTS。复制文件任务未创建文件夹
- mysql - MySQL 创建数据库表查询
- javascript - 如何发送和接收通过 getUsermedia() 生成的桌面捕获流
- spring-cloud-dataflow - Spring Cloud 数据流 2.0.0 RELEASE
- xml - 训练后如何找到“Humanoid-v2”代理行进的距离?
- azure-active-directory - 使用客户端 ID 获取 SharePoint Office 365 数据
- javascript - D3 图表不会显示动态创建的 JSON
- parsing - 语言如何测试它们的解析逻辑?
- java - 无法解决:com.google.android.exoplayer:exoplayer-smoothstreaming:2.9.1