Programing Exercise 4:Neural Networks Learning

      本文讲的是coursera上斯坦福大学机器学习公开课(吴文达)课程第五周Neural Networks :learning 的课后作业。本文给出了作业实现的具体代码,并给出相应的注释和解释,供各位同学共同讨论学习。
        吴老师在课程里说过求解神经网络的一般顺序为:
(1)随机生成初始化theta
(2)正向传播,计算h(x)
(3)计算J值
(4)反向传播,计算误差delta,并计算J对矩阵内各个元素的偏导数
(5)利用gradient checking比较反向传播计算得到的偏导数与numerical gradient计算得到的偏导数的结果,确保反向传播准确无误
(6)利用高级优化算法,利用反向传播,得到最小化J,并得到对应的参数theta值即为所求

准备工作:
a.因为给出的sigmiod函数只能求解标量,我们要修改其代码,使其对矩阵也起作用。
修改sigmoid.m,得到以下代码:
function g = sigmoid(z)
[m,n] = size(z);
g = zeros(m,n);
for i = 1:m,
    for j = 1:n,
        g(i,j) =  1.0 ./ (1.0 + exp(-z(i,j)));%对z的每个元素求计算其逻辑值
    end
end
end
b.由于反向传播时需要求sigmoid函数的偏导数,需要修改sigmoidGradient.m,要求它对矩阵也有作用。
油微积分可证,g(z)的偏导数为:g(z)*(1-g(z)),具体原因需要参考微积分求导相关章节。
修改sigmoidGradient.m,得到以下代码:
function g = sigmoidGradient(z)
g = zeros(size(z));
g = sigmoid(z) .* (1 - sigmoid(z));%因为要使函数对矩阵也起作用,所以用点乘
end

下面按照本文头部给出的步骤的实现代码:
1.随机生成初始化theta
<strong>function W = randInitializeWeights(L_in, L_out)
epsilon_init = 0.
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值