深度学习-吴恩达第一课第四周课程作业

在前面两节课的基础上,这次作业是训练一个N层神经网络,来判断一张图片是否有猫,实现过程其实和第三周很相似,因为层数不确定,所以在向前传播和反向传播的时候会用到for循环,代码相对而言反而更精简了。贴出的代码可能和老师给的模板不一样,我没有看到老师的原版课程作业,也是在网上找的资料自己写的,但是网上的代码大部分函数封装度高,但初学为了方便,也好理解,我没有采用那种方法。

简单介绍一下模型,N层,传入每层的单元数,包括最后的输出层,这里我们是一个二分类问题,最后一层单元数就是1,隐藏层激活函数使用relu,最后输出层使用sigmoid

可能有人不好理解这个N层,和传入参数的问题,举个栗子就很好理解了。比如我们Layer维度传入的list是[4,3,2,1],这其实是一个三层神经网络,因为4是第0层,也就是输入层的特征值有4个,然后两个隐藏层,单元数分别为3,2,最后输出层

但在代码中会通过这个list来计算我们模型的层数,使用 len(layer_list)来计算,得到的结果是4,这就把第一层也算进去了,但这里得到的L=4其实不是真正意义上的我们模型的层数,这里不给它减1,而是保留4的值是因为,即使他是4,但list存储元素是从0开始的,也就是list[0]=4,list[1]=3,list[2]=2,这样子,而我们无论在计算w还是b的时候,都是(w1,b1),(w2,b2)直到3,可以发现数标是正好吻合的。

 

下面贴代码了:

 

1.导库

import numpy as np
import matplotlib.pyplot as plt
import h5py

 

2.参数初始化

#参数初始化,将所有w/b都封装在一个dict中
def initialize_parameters(layer_dims):
    parameters = {}
    L = len(layer_dims)
    
    for i in range(1,L):
        parameters['w'+ str(i)] = np.random.randn(layer_dims[i],layer_dims[i-1])*0.01
        parameters['b'+ str(i)] = np.zeros((layer_dims[i],1))
        
        assert(parameters['w'+ str(i)]).shape == (layer_dims[i],layer_dims[i-1])
        assert(parameters['b'+ str(i)]).shape == (layer_dim
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值