Java 神经网络测试误差范围

Java 神经网络测试误差范围,java,neural-network,artificial-intelligence,Java,Neural Network,Artificial Intelligence,我正在用Java实现一个神经网络,它只使用完全连接的层 我用一个简单的正弦函数训练网络,其中x(在[0,1]中)作为输入,并且 (1+Math.sin(x*2*Math.PI))/2作为输出 如图所示,错误似乎正在减少到10%左右,据我所知,这对于这样的网络来说并不太糟糕。该图显示了大约每200次迭代的平均值 在测试特定值时,我会遇到很大的错误。从0.1%到数千%。虽然平均而言,它们看起来接近于训练曲线给出的值,但网络确实每十次测试失败一次 我的问题是:网络出现如此不稳定的行为“正常”吗?即使这

我正在用Java实现一个神经网络,它只使用完全连接的层

我用一个简单的正弦函数训练网络,其中
x
(在[0,1]中)作为输入,并且
(1+Math.sin(x*2*Math.PI))/2
作为输出

如图所示,错误似乎正在减少到10%左右,据我所知,这对于这样的网络来说并不太糟糕。该图显示了大约每200次迭代的平均值

在测试特定值时,我会遇到很大的错误。从0.1%到数千%。虽然平均而言,它们看起来接近于训练曲线给出的值,但网络确实每十次测试失败一次

我的问题是:网络出现如此不稳定的行为“正常”吗?即使这些错误似乎并不经常出现,但这样的问题也会出现这种范围的错误吗?我以为回答会更“流畅”,这就是我为什么要问的原因

感谢您的反馈,非常感谢

编辑: 1) 在测试阶段,我通过以下方式获得错误百分比:
Math.abs((网络输出预期输出)/预期输出)*100
。我只使用expectedOutput,而不使用此错误百分比进行培训

2) 关于培训:简而言之,我运行以下循环:

double input = Math.random();
double output = trainingFunction(input);
net.backPropagate(input, output);
在trainingFunction返回上述标准化正弦函数的情况下,反向传播首先执行网络,然后使用梯度下降法和sigmoid导数计算权重的增量


3) 拓扑结构为1个输入神经元->20个隐藏神经元->1个输出神经元。当使用更多隐藏层时,我也注意到了同样的结果

你说的“用简单正弦函数训练”是什么意思?这是你的输入/输出吗?我希望这不是您的激活功能,因为最好使用逻辑功能。是的,这是输入/输出。激活函数是一个sigmoid。千分之??乍一看,这听起来很不自然-为什么错误会超过100%-您的功能出了问题-您需要将训练错误降低到0.001。您能否向我们提供有关如何训练网络、网络拓扑结构以及使用何种错误功能的更多详细信息?请注意,误差不是用百分比来衡量的,因为它是一个实数。你所说的特定值中的错误是什么意思?你如何用百分比来衡量它?我编辑了这个问题并添加了一些元素。至少现在我知道这不是一种正常的行为,我将回顾我的实现。已经谢谢你了!