我是一个初学者,我正在尝试在 C# 中实现反向传播以用于学校目的(所以现在没有 tensorflow,我们必须手动学习它)。我有 64 个输入层节点和 64 个输出层节点,有点像自动编码器结构,因为我们稍后会讨论 MLP。
我将 Delta Output 计算为:
delta_out = (y_out) * (1 - y_out) * (desired - y_out)
我已经针对 XOR 输入/输出场景测试了我的程序,它会正确猜测这种场景,但如果我将输入和输出的所有 64 个节点放入,那么它不会给我正确的预测(比如 0% 准确度)。
我也试图总计所有的 delta_out abs(delta_out)。对于 XOR 场景,随着训练的进行,delta_out 的绝对和接近于零。但是如果我选择 64 输入输出测试,那么所有 delta_out 的绝对总和从一个很小的数字开始并一直保持在那里。
对于正常工作的 XOR(我也尝试过运行良好的 OR 和 AND 测试),我使用以下结构 2 个节点用于输入,4 个节点用于隐藏,1 个节点用于输出。
对于 64 个输入和输出,我测试了隐藏层的各种节点数,从 8 个节点到 128 个节点。如果我为隐藏层使用 64 个或更多节点,那么所有 delta_out 的绝对总和即使在开始时也接近 0,并且变化太慢。
我还测试了各种学习率(隐藏层和输出层的学习率不同)。我从 0.1 到 0.75 进行了测试,但它似乎对我应该完成的 64 个输入/输出没有帮助。我还将纪元数从 100k 更改为 500k,但似乎没有任何帮助。
也许我不太了解反向传播的概念?