我在编程作业中遇到了这个问题。计算神经网络成本函数的公式是:
在我的情况下,h是一个5000×10的矩阵,y是一个5000×1的向量。我使用以下代码进行计算:
X = [ones(m, 1), X]; a2 = sigmoid(X * Theta1'); a2New = [ones(m, 1), a2]; h = sigmoid(a2New * Theta2'); %X是训练样本的矩阵,Theta1和Theta2是预计算的权重,a2是隐藏层。 k = num_labels; % 类别的数量 for i = 1:k; c = y==k; J = (-1/m)*((c' * log(h(:,i)))' + ((1-c)' * log(1-h(:,i)))'); end
正确答案大约是0.23,但我得到的是9。谁能告诉我我的代码哪里出了问题?
回答:
对于你的代码,我认为在for循环中应该使用y == i
而不是y==k
。
for i = 1:k; c = y==i; J = (-1/m)*((c' * log(h(:,i)))' + ((1-c)' * log(1-h(:,i)))');end
并且
其次,你对y
的向量化方式似乎不对,应该使用向量化实现(1:num_labels)' == y'
。