Andrew Ng, Machine Learning, Week 5 , Programming exercise, nnCostFunction,

编程作业: Neural Network Learning

OCTAVE代码,只有计算J(θ)的值的代码,带有思考过程
%Neural Network Computation
X = [ones(m,1) X];
a= sigmoid(X * Theta1');
a= [ones(m,1) a];
H = sigmoid(a * Theta2');

%record the labels Y
T = [1:num_labels];
for i = 1 : m
  Y(i,:)= (T == y(i,:));
end 

%Cost Computation
J1 = (-Y.*log(H)-(1-Y).*log(1-H))/m;
J2 = ones(1,m) * J1;
J = J2 * ones(num_labels,1);



呕心沥血写出的十几行代码,简直要哭了。

思路是这样子的(自己的槽点太多):

1、神经网络的计算



X (m,n), 要在X左边加上一列1(m,1)
[1 x1 x2 x3 ……x400] * theta1 (25,401) -> a (1,25)
[1 a1 a2 …… a25]* theta2 (10,26) -> h (1,10)

X * theta1 - > H (m,10)
【因为是分类问题,所以计算结果都要加sigmoid函数】

2、y的构造
y 本来是单纯的结果序列[10,3,2.......](1,m)
但是根据CostFunction的定义,需要将其转成



使用一个for循环,进行转换.

3、Cost Function的计算

根据定义


h(x)是神经网路预测结果
H (m,10)
Y是数据中给定的结果
Y (m,10)
可以发现,其实要求的是Y.*H的结果,然后求m*10矩阵所有元素的和。
两次次求和可以看做是将(1)所有的样例内10种分类结果计算误差求和 、 (2)所有样例的误差求和

J1 = (-y.*log(o)-(1-y).*log(1-o))/m;
J2 = ones(1,m) * J1;
J = J2 * ones(num_labels,1);

【也可以写成两个sum函数的形式】
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值