实现正则化主要需要在两个地方做出修改:
1.cost计算(L2 regularization)
#正则化
n = len(parameters)//2
cost_extra = 0
for x in range(n):
w = parameters['w'+str(x+1)]
cost_extra += np.sum(np.multiply(w,w))
cost_extra=np.squeeze(cost_extra)
cost=cost+lambd/(2*m)*cost_extra
2.更新参数w
说明一下,这里修改的主要目的是要更新参数,实际上由于cost的改变,对其参数w求偏导得到的dw必然也会改变,然后再执行
w=w-dw的时候,把更改的dw带进来,但是这里代码实现的时候,用了原来的dw,然后直接w=w-dw-正则项
这样处理的原因是在得到dw值得时候,是从后往前反向传播的,而由于输出层与隐藏层使用的激活函数不同,所以在计算dw的
时候是分开计算的,在原本计算上加上正则项代码太冗余,所以把它放在更新时处理。
#只改变参数w的更新,b的不变
parameters['w'+str(l+1)] = parameters['w'+str(l+1)]
- alphs * grads['dw'+str(l+1)]
- alphs * (lambd/m) * parameters['w'+str(l+1)]
这需要改动的两个集中的地方,至于函数参数的改变自己调整一下,就不贴代码了。
在第一课第四周构建的模型的基础上,加上不同参数值得正则处理,看看情况如何
n=train_data_finalX.shape[0]
layer_