动手学深度科学课后作业-CNN

卷积神经网络

从全连接层到卷积 - why conv

  • 1.假设卷积层覆盖的局部区域 Δ=0 。在这种情况下,证明卷积内核为每组通道独立地实现一个全连接层

Δ \Delta Δ=0时,公式变化为:

[ H ] i , j , d = ∑ a = 0 0 ∑ b = 0 0 ∑ c [ V ] 0 , 0 , c , d [ X ] i , j , c = ∑ c [ V ] c , d [ X ] i , j , c [H]_{i,j,d} = \sum_{a=0}^{0} \sum_{b=0}^{0} \sum_{c} [V]_{0,0,c,d}[X]_{i,j,c} \\= \sum_{c} [V]_{c,d}[X]_{i,j,c} [H]i,j,d=a=00b=00c[V]0,0,c,d[X]i,j,c=c[V]c,d[X]i,j,c
其中c为通道,每一个输出则是对输出元素位置对应的输入元素的按通道累加,也就是1*1卷积。

  • 2.为什么平移不变性可能也不是好主意呢?

并不是所有场合都符合平移不变性的,视觉上所看到物体的形状纹理颜色都会收到背景的影响,当其平移后能够在一定程度上满足平移不变性时候,卷积神经网络才能较好的起作用,反之,则不能起到很好的作用。

  • 当从图像边界像素获取隐藏表示时,我们需要思考哪些问题

1 图像尺寸会改变,需要考虑图像尺寸的保持
2 需要padding吗,需要多大的padding

  • 描述一个类似的音频卷积层的架构

音频是一维数据,可能类似于局部全连接?

  • 卷积层也适合于文本数据吗?为什么?

不适合,文本数据受到语境的影响很大。即理解到的意思一定程度上取决于上下文。

图像卷积-conv-layer

  • 构建一个具有对角线边缘的图像X
    A 如果将本节中举例的卷积核K应用于X,会发生什么情况
    会检测出多像素宽度的边缘,具体实现如下:
  import torch

X = torch.eye(6)
K = torch.tensor([[1, -1]])
def corr2d(X, K):
    y = torch.zeros((X.shape[0] - K.shape[0] + 1, X.shape[1] - K.shape[1] +1))
    for i in range(y.shape[0]):
        for j in range(y.shape[1]):
            y[i, j] = ((X[i:i+K.shape[0], j:j+K.shape[1]])*K).sum()
    return y
y = corr2d(X, K)
print(y)
"""
tensor([[ 1.,  0.,  0.,  0.,  0.],
        [-1.,  1.,  0.,  0.,  0.],
        [ 0., -1.,  1.,  0.,  0.],
        [ 0.,  0., -1.,  1.,  0.],
        [ 0.,  0.,  0., -1.,  1.],
        [ 0.,  0.,  0.,  0., -1.]])
"""

B 如果转置X会发生什么?

仍旧可以检测出边缘

如果转置K会发生什么?

检测的结果会发生转置

  • 如何通过改变输入张量和卷积核张量,将互相关运算表示为矩阵乘法?

    拉伸每一个输出元素所对应的输入张量的对应元素。

填充和步幅-padding-and-strides

  • 对于音频信号,步幅 2 说明什么
    等价于2倍下采样。

  • 步幅大于 1 的计算优势是什么?
    降低计算复杂度,减轻存储和计算压力。

多输入多输出通道

  • 假设我们有两个卷积核,大小分别为 𝑘1 和 𝑘2
    A 证明运算可以用单次卷积来表示。
    B 这个等效的单个卷积核的维数是多少呢
    ( k 1 − 1 ) + k 2 (k_1-1)+k_2 (k11)+k2

  • 假设输入为 𝑐𝑖×ℎ×𝑤 ,卷积核大小为 𝑐𝑜×𝑐𝑖×𝑘ℎ×𝑘𝑤 ,填充为 (𝑝ℎ,𝑝𝑤) ,步幅为(𝑠ℎ,𝑠𝑤)
    A 前向传播的计算成本
    乘法: c 0 ∗ c i ∗ ( ( ( h + p h − k h ) / S h ) + 1 ) ( ( ( w + p w − k w ) / s w ) + 1 ) ∗ k h ∗ k w c_0 *c_i *(((h+p_h-k_h)/S_h)+1)(((w+p_w-k_w)/s_w)+1) *k_h*k_w c0ci(((h+phkh)/Sh)+1)(((w+pwkw)/sw)+1)khkw
    加法: c 0 ∗ c i ∗ ( ( ( h + p h − k h ) / S h ) + 1 ) ( ( ( w + p w − k w ) / s w ) + 1 ) ∗ ( k h ∗ k w − 1 ) c_0 *c_i *(((h+p_h-k_h)/S_h)+1)(((w+p_w-k_w)/s_w)+1) *(k_h*k_w-1) c0ci(((h+phkh)/Sh)+1)(((w+pwkw)/sw)+1)(khkw1) (这里没有考虑偏执)
    内存占用是多少
    参数占用: c o ∗ ( c i ∗ k h ∗ k w + 1 ) c_o*(c_i*k_h*k_w+1) co(cikhkw+1)
    输入特征图: 𝑐 i ∗ h ∗ 𝑤 𝑐_i*ℎ*𝑤 cihw
    输出特征图: c o ∗ ( ( ( h + p h − k h ) / S h ) + 1 ) ( ( ( w + p w − k w ) / s w ) + 1 ) c_o*(((h+p_h-k_h)/S_h)+1)(((w+p_w-k_w)/s_w)+1) co(((h+phkh)/Sh)+1)(((w+pwkw)/sw)+1)
    反向传播的内存占用是多少
    反向传播的计算成本是多少

  • 如果我们将输入通道 𝑐𝑖 和输出通道 𝑐𝑜 的数量加倍,计算数量会增加多少?如果我们把填充数量翻一番会怎么样

通道翻倍则计算量翻倍,填充增加则是线性增长复杂度。

  • 如果卷积核的高度和宽度是 𝑘ℎ=𝑘𝑤=1 ,前向传播的计算复杂度是多少?
    o ( c i ∗ c o ∗ h ∗ w ) o(c_i*c_o*h*w) o(cicohw)

  • 本节最后一个示例中的变量Y1和Y2是否完全相同?为什么?
    不会 精度问题。

pooling

你能将平均汇聚层作为卷积层的特殊情况实现吗?

import torch
import torch.nn as nn

in_channel, out_channel = 1, 1
padding = 2
avg_pooling = nn.Conv2d(kernel_size=2, in_channels=in_channel, out_channels=out_channel, padding=0,stride=padding,bias=False)
nn.init.constant_(avg_pooling.weight, 1/4)
print(avg_pooling.weight)
X = torch.range(start=1, end=16).reshape((1,1,4, 4))
y = avg_pooling(X)
print(y)
'''
Parameter containing:
tensor([[[[0.2500, 0.2500],
          [0.2500, 0.2500]]]], requires_grad=True)
tensor([[[[ 3.5000,  5.5000],
          [11.5000, 13.5000]]]], grad_fn=<ConvolutionBackward0>)
'''

你能将最大汇聚层作为卷积层的特殊情况实现吗?

假设汇聚层的输入大小为 𝑐×ℎ×𝑤 ,则汇聚窗口的形状为 𝑝ℎ×𝑝𝑤 ,填充为 (𝑝ℎ,𝑝𝑤) ,步幅为 (𝑠ℎ,𝑠𝑤) 。这个汇聚层的计算成本是多少?

c ∗ ( ( h + p h − p h ) / s h + 1 ) ∗ ( ( w + p w − p w ) / s w + 1 ) ∗ ( p h ∗ p w − 1 + 1 ) c*((h+p_h-p_h)/s_h + 1 )*((w+p_w-p_w)/s_w + 1 )*(p_h*p_w-1 +1) c((h+phph)/sh+1)((w+pwpw)/sw+1)(phpw1+1) -1是加法个数 后面+1是除法个数

为什么最大汇聚层和平均汇聚层的工作方式不同?

一个是找最大的元素,更侧重于检测响应大的点,求均值则会在一定程度上进行空间位置的融合。

我们是否需要最小汇聚层?可以用已知函数替换它吗?

最小汇聚层指的是最小响应的值?这样会造成信息大量丢失?

除了平均汇聚层和最大汇聚层,是否有其它函数可以考虑(提示:回想一下softmax)?为什么它不流行?

softmax需要学习参数且计算复杂

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值