我是 CNN 的新手,正在尝试研究一些 MATLAB 示例代码(因为我需要知道内部计算)。我最近意识到我正在使用的示例代码不会将误差乘以 sigmoid 在反向传播中的导数。前馈过程将 sigmoid 作为最后一层的激活函数,因此据我了解,反向传播误差 =(输出 - 目标)* sigmoid 的导数(输出)。但是,作者故意使用以下代码禁用了这种乘法:
if cnn.loss_func == 'cros'
if cnn.layers{cnn.no_of_layers}.act_func == 'soft'
cnn.CalcLastLayerActDerivative = 0;
elseif cnn.layers{cnn.no_of_layers}.act_func == 'sigm'
cnn.CalcLastLayerActDerivative = 0;
end
end
当 cnn.CalcLastLayerActDerivative = 0 时,错误被定义为(输出 - 目标)。我尝试初始化 cnn.CalcLastLayerActDerivative = 1 以便在反向传播中考虑 sigmoid 的导数,但随后我的错误率变差了。我不确定这是否只是因为 sigmoid 的导数在 [0,0.25] 范围内,或者我没有正确理解反向传播。有谁知道为什么会发生这种情况以及我是否应该在计算中添加 sigmoid 的导数?
谢谢!