我正在阅读Andrew Ng关于机器学习的课程,目前正在MATLAB / Octave中编写一个前向传播代码来解决这个成本函数:
目前,我已经用这样的for循环形式编写了它:
for i= 1:m
for j= 1:num_labels
J = J + log(ht(j,i))*y(j,i) + log(1-ht(j,i))*(1-y(j,i));
end
end
J = -J/m;
这就完成了工作。但是,我想简化这段代码,因为当我觉得我可以使用矢量化形式时,我总是觉得在MATLAB中使用for循环有点“脏”。但for循环似乎很自然,因为有两个总结。
答案 0 :(得分:1)
这一行应该给你与上面的循环代码相同的结果:
J = -sum(log(ht(:)).*y(:) + log(1-ht(:)).*(1-y(:)))/m;
colon operator (:)
用于将每个矩阵重新整形为列向量,以便在逐元素乘法后,可以使用sum
的单个调用来累加所有结果。