动手学深度学习(卷积神经网络学习笔记)

卷积神经网络

为什么要用卷积神经网络?

1.可以处理空间结构丰富的数据(二维如图片,一维音频、文本和时间序列分析),关注数据的上下文信息(像素之间的相关性) 

2.卷积神经网络需要的参数少于全连接架构的网络,而且卷积也很容易用GPU并行计算 

 6.1. 从全连接层到卷积

6.11不变性

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。编程:v(i,j,a,b)=v(a,b)不随i,j像素位置变化而变化

  2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。编程:a,b>dlt时a,b=0即大于dlt的值就不看了

 (全连接层到卷积w->v,多了行和高)            dd869bb010de4ba8b72416c5f365b137.png

6.2图像卷积

卷积运算不填充,输出图像大小 

022981b031c74642b9bdc853f699cbf9.png

 6.2.1卷积层

卷积层对输入和卷积核权重进行互相关(卷积)运算,并在添加标量偏置之后产生输出。卷积层中的两个被训练的参数是卷积核权重和标量偏置。

class Conv2D(nn.Module):
    def __init__(self, kernel_size):
        super().__init__()
        self.weight = nn.Parameter(torch.rand(kernel_size))#卷积核大小
        self.bias = nn.Parameter(torch.zeros(1))

    def forward(self, x):
        return corr2d(x, self.weight) + self.bias#前向传播调用corr2d函数执行互相关运算

#卷积块一般包含卷积层,激活函数(卷积运算后的结果通过激活函数,可实现非线性化),池化层

 6.2.2学习卷积核

lr = 3e-2  # 学习率

for i in range(10):
    Y_hat = conv2d(X)
    l = (Y_hat - Y) ** 2#输出层和输入层平方误差
    conv2d.zero_grad()
    l.sum().backward()
    # 迭代卷积核
    conv2d.weight.data[:] -= lr * conv2d.weight.grad#计算梯度
    if (i + 1) % 2 == 0:
        print(f'epoch {i+1}, loss {l.sum():.3f}')

可以自动计算卷积核参数

 6.23特征映射和感受野

卷积层有时被称为特征映射(feature map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。

感受野: 给定2×2卷积核,阴影输出元素值19的感受野是输入阴影部分的四个元素。 假设之前输出为Y,其大小为2×2,现在我们在其后附加一个卷积层,该卷积层以Y为输入,输出单个元素z。 在这种情况下,Y上的z的感受野包括Y的所有四个元素,而输入的感受野包括最初所有九个输入元素。 因此,当一个特征图中的任意元素需要检测更广区域的输入特征时,我们可以构建一个更深的网络。#感受野是随着卷积层数增加而不断变大的,因为包含相关计算的像素范围扩大

6.3填充和步幅

填充后输出情况

9129b95059a2419aaa5fc503d7f94be4.png

在许多情况下,我们需要设置ph=kh−1和pw=kw−1,使输入和输出具有相同的高度和宽度。 

卷积核通常选为奇数,可以底部和顶部填充相同数量的行,左右两侧填充相同数量的列。填充完以后进行卷积则原图(i,j)就对应卷积图的(i,j)

步幅,上图 

618f4653df1d41d4a765856cd64799ff.png

6.4多输入输出通道

6.4.1多输入通道

及ci>1,RGB格式图像ci=3,

89559e6770d746a983456ed593711726.png

 6.4.2多输出通道

随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,我们可以将每个通道看作是对不同特征的响应。而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此,多输出通道并不仅是学习多个单通道的检测器。

6.4.3 1*1矩阵

1×1卷积层通常用于调整网络层的通道数量和控制模型复杂性。

 6.5汇聚层(池化层)

汇聚(pooling)层,它具有双重目的:降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。

在处理多通道输入数据时,汇聚层在每个输入通道上单独运算,而不是像卷积层一样在通道上对输入进行汇总。 这意味着汇聚层的输出通道数与输入通道数相同。

6.6卷积神经网络

6.6.1LeNet

0de58f1517ec4672b8d2a9f485a98f4f.png

可修改这些提高性能

  1. 调整卷积窗口大小。

  2. 调整输出通道的数量。

  3. 调整激活函数(如ReLU)。

  4. 调整卷积层的数量。

  5. 调整全连接层的数量。

  6. 调整学习率和其他训练细节(例如,初始化和轮数)

编程:1.with用法

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值