我正在尝试实现具有5个隐藏层的分类的神经网络,以及输出层中的softmax交叉熵 . 实现在JAVA中 .
为了优化,我使用了MiniBatch梯度下降(批量大小= 100,学习率= 0.01)
但是,经过几次迭代后,权重变为“NaN”,并且预测值对于每个测试用例都是相同的 .
无法调试此错误的来源 . 这是代码的github链接(带有测试/培训文件 . )https://github.com/ahana204/NeuralNetworks
我正在尝试实现具有5个隐藏层的分类的神经网络,以及输出层中的softmax交叉熵 . 实现在JAVA中 .
为了优化,我使用了MiniBatch梯度下降(批量大小= 100,学习率= 0.01)
但是,经过几次迭代后,权重变为“NaN”,并且预测值对于每个测试用例都是相同的 .
无法调试此错误的来源 . 这是代码的github链接(带有测试/培训文件 . )https://github.com/ahana204/NeuralNetworks
2 回答
假设您实现的代码是正确的,一个原因是学习率很高 . 如果学习率很大,则权重可能不会收敛并且可能变得非常小或非常大,这可以显示为NaN . 尝试降低学习率,看看是否有任何变化 .
在我的情况下,我忘记了训练数据的标准化(通过减去平均值) . 这导致我的softmax方程的分母为0.希望这有帮助 .