吴恩达机器学习课程神经网络代价函数for循环实现结果异常
问题根因
你的计算逻辑没有问题:逐个计算每个训练样本对应所有类别的交叉熵损失,再把所有损失求和后除以样本数,完全符合二分类交叉熵拓展到多分类场景的计算规则。
你得到错误代价值的原因是代码存在笔误:
在遍历样本的for循环中,你获取当前样本标签的代码写为:
class = y(m);
这里你固定读取了第m个(也就是全部训练样本里的最后一个)的标签,没有跟随循环变量i更新,所有样本的真实标签y_i都和最后一个样本的标签一致,自然会得到远高于预期的损失值。
修复方法
把上述代码行修改为:
class = y(i);
修改后重新运行即可得到预期的0.287629的代价结果。
补充注意事项
- 后续补充正则化项时,注意不要将偏置单元对应的权重纳入正则求和范围
- 如果你后续继续用循环实现反向传播梯度计算,注意每个样本的误差项梯度要先累加,最终再除以样本数m,同时补充正则对应的梯度部分
内容的提问来源于stack exchange,提问作者dumjo
相关产品推荐
相关产品推荐

