NN网络初始权值问题

在写吴恩达教师dl第四周的作业的时候,遇到一个好玩的事情

我设定了1000的迭代次数,但是可以看出,该函数已经收敛,一直处于0.65左右。经过改良可以变成

 

 

可以看出第900次迭代的cost只有0.4,事实上,继续往下迭代可以达到0.04的误差。

首先这样产生的问题可能是学习率过小,使得梯度得不到有效的下降

梯度下降公式为

W[l]=W[l]−α dW[l] 

α就是学习率。有趣的是,这里并不是学习率的问题。

问题在于初始化权值:

parameters["W" + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) *0.01

此处的权值乘0.01的系数。

修改后的权值初始化:

for l in range(1, L):
        parameters["W" + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) / np.sqrt(layers_dims[l - 1])
        parameters["b" + str(l)] = np.zeros((layers_dims[l], 1))

(具体代码可以参考:【中文】【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第四周作业(1&2)_何宽的博客-CSDN博客_吴恩达课后编程作业

) 

 这里的权值与layer的元素呈正比关系。笔者猜测,跟层数有关。当hidden-layer很少,1,2层时,系数设为0.01无影响。当层数变多,没层元素不同,因此修改修正系数,使得数据正常梯度下降

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值