我正在为我的模型使用反向传播算法。当我针对实际数据的较小子集对其进行测试时,它在简单的异或情况下工作得非常好。
总共有3个输入和一个输出(0,1,2)
我已将数据集分为训练集(80% 约为 5.5k),其余 20% 作为验证数据。
我使用trainingRate 和momentum 来计算增量权重。
我已将输入规范化如下
block 引用> block 引用>from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(input_array)我使用 1 个隐藏层,其中具有 sigmoid 和线性激活函数,分别用于输入隐藏和隐藏输出。
我使用trainingRate = 0.0005、momentum = 0.6、Epochs = 100,000 进行训练。任何更高的训练率都会导致 Nan 的错误增加。 0.5 到 0.9 之间的动量值可以正常工作,任何其他值都会产生错误 Nan。
我尝试了隐藏层中不同数量的节点,例如 3、6、9、10,每种情况下的错误都收敛到 4140.327574。我不知道如何减少这个。更改激活函数没有帮助。我什至尝试添加另一个具有高斯激活函数的隐藏层,但我无法减少任何错误。
是因为异常值吗?我需要从训练数据中清除这些值吗?
任何建议都会有很大的帮助,无论是激活函数、隐藏层等。我已经尝试让它工作很长一段时间了,但现在有点卡住了。
最佳答案
嗯,我遇到了类似的问题,仍然没有解决它,但我可以告诉你我发现的一些事情。我认为网络过度拟合,我的错误在某些时候下降然后又开始上升,验证集也是如此......你也是这种情况吗?
检查你是否很好地实现了“提前停止”算法,大多数时候问题不是反向传播,而是错误分析或验证分析。
希望这有帮助!
关于machine-learning - 反向传播神经网络 - 错误不收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21988414/