2020-9-30 吴恩达-C4 卷积神经网络-w1 CNN(课后编程1-Convolution model - Step by Step)

原文链接

如果打不开,也可以复制链接到https://nbviewer.jupyter.org中打开。

欢迎来到第四课的第一个编程作业。
在本作业中,你将在numpy中实现一个卷积层(CONV)和池化层(POOL),包含前向传播和反向传播(可选)。

符号

  • 上标 [ l ] [l] [l] 表示第 l l l
    • 例如: a [ 4 ] a^{[4]} a[4] 是第4层激活值。 W [ 5 ] W^{[5]} W[5] b [ 5 ] b^{[5]} b[5] 是第5层的参数。
  • 上标 ( i ) (i) (i) 表示第 i i i 个样本
    • 例如: x ( i ) x^{(i)} x(i) 表示第 i i i 个训练样本输入。
  • 下标 i i i 表示向量的第 i i i
    • 例如: a i [ l ] a^{[l]}_i ai[l] 表示第 l l l 层第 i i i 个激活值,假设这是一个全连接层(FC)。
  • n H n_H nH, n W n_W nW n C n_C nC 表示给定层的高,宽和通道的数量。如果你想指定 l l l 层, 那写作: n H [ l ] n_H^{[l]} nH[l], n W [ l ] n_W^{[l]} nW[l], n C [ l ] n_C^{[l]} nC[l]
  • n H p r e v n_{H_{prev}} nHprev, n W p r e v n_{W_{prev}} nWprev n C p r e v n_{C_{prev}} nCprev 表示上一层的高,宽和通道的数量。如果你想指定 l l l 层, 那写作: n H [ l − 1 ] n_H^{[l-1]} nH[l1], n W [ l − 1 ] n_W^{[l-1]} nW[l1], n C [ l − 1 ] n_C^{[l-1]} nC[l1]

1.本文涉及的基本库

首先导入本作业需要的库。

  • numpy :是用Python进行科学计算的基本软件包
  • matplotlib:是一个著名的库,用于在Python中绘制图表
  • np.random.seed(1): 用于保持所有随机函数的一致性, 请不要修改
import numpy as np
import h5py
import matplotlib.pyplot as plt

#%matplotlib inline #Jupyter Notebook中使用
plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

#%load_ext autoreload
#%autoreload 2

np.random.seed(1)

2.作业大纲

你将实现一个卷积神经网络的一些模块。你将实现的每个功能都有详细的说明,指导你完成所需的步骤:

  • 卷积功能,包括:
    • 0填充
    • 卷积窗口
    • 前向卷积
    • 反向卷积(可选)
  • 池化功能,包括:
    • 前向池化
    • 创建掩码
    • 值分配
    • 反向池化(可选)

本文中将要求你使用numpy从头开始实现这些函数。
之后你将会使用Tensorflow中等价函数来构建以下模型
在这里插入图片描述

注意:对于每一步前向步骤,都有对应的反向过程。所以在前向模块每一步,你都要保存一些参数在cache中。这些参数将在反向传播计算梯度时候使用。

3.卷积神经网络

尽管编程框架使卷积容易使用,但卷积仍然是DL中最难理解的概念之一。卷积层将输入(input volume)转换成不同维度的输出(output volume),如下所示:
在这里插入图片描述

在本节中,你将构建卷积层的每一步。首先你实现2个辅助函数:1个是0填充,另外一个是计算卷积。

3.1 零填充

零填充会在图像边界周围添加值为0的像素点。

在这里插入图片描述

填充的主要优点包括:

  • 它允许你使用一个不会缩小上一层输出的高度和宽度的卷积层。这对于构建一个深层网络非常重要,否则在网络的深层,高度和宽度会越来越小。一个很重要的填充方法是same卷积,填充后,你的输出大小和输入大小是一样的,也就是宽度和高度在每一层都会保留。
  • 它可以帮助我们保留更多图像的边界上的信息。如果没有填充,下一层很少值会受到图像边缘像素的影响(因为大部分图像边缘信息都丢失了)。

练习: 使用np.pad实现下面的函数,它会把所有的样本图像 X X X 都使用0进行填充。注意,如果你想按照以下要求填充数组“a”,

  • a.shape= ( 5 , 5 , 5 , 5 , 5 ) (5,5,5,5,5) (5,5,5,5,5)
  • 使用pad = 1填充第2维
  • 使用pad = 3填充第4维
  • 使用pad = 0填充剩余维度

可以使用如下代码

a = np.pad(a, (
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值