没有编译错误不代表程序没有BUG。你必须在确保代码没有bug后,再调试网络的性能。
数据的尺度可以很大影响到训练。
标准化数据,使之平均数为0,单位方差或者位于一个小区间如[-0.5, 0.5]可以提高训练。层的正则化可以通过保持神经元激活的均值和标准差提高网络训练。选择和优化网络regularization是建立模型的关键部分。避免模型对训练数据过拟合。然而,如何你的网络正努力降低在训练集上的损失,regularization反而会掩盖问题所在。当网络不能很好学习的时候,停到所有的regularization然后验证非regularization的网络是否运行正常。然后逐个将regularization添加回来,在这个过程验证它们。
Regularization不正确设置的例子:
L2, L1 regularization设置太大,所以权重会很小。两种regularization会冲突。很难同时使用layer normalization和dropout。不要将参数设置写死。在一个配置文件中设置这些参数。当调整任何参数的时候,创建一个新的配置文件。最后在这些配置文件后面添加每一次迭代训练和验证的损失。这样做的目的是可以很容易的回看之前的实验结果。
原文链接:https://stats.stackexchange.com/questions/352036/what-should-i-do-when-my-neural-network-doesnt-learn