《动手学深度学习2.0》学习笔记(二)

《动手学深度学习2.0》学习笔记(二)

《动手学深度学习2.0》电子书的链接地址为https://zh.d2l.ai/index.html

本文记录了我在学习本书5-7章节(包括深度学习计算、卷积神经网络、现代卷积神经网络)过程中的理解和收获。

笔记首次发布于我的博客https://valoray.github.io/,排版比优快云稍好看一些,但内容是一致的。

深度学习计算

  1. 块(block)

    • 一个块可以由许多层组成;一个块可以由许多块组成。
    • 从编程的角度来看,块由(class)表示。 每个块都必须定义一个将其输入转换为输出的前向传播函数, 并且必须存储任何必需的参数。
  2. Sequential类:用于把多个模块顺序地串起来

  3. 参数是复合的对象,包含值、梯度和额外信息。如何访问参数参考https://zh.d2l.ai/chapter_deep-learning-computation/parameters.html

  4. 参数初始化

  5. 加载和保存张量

    x = torch.arange(4)
    torch.save(x,"x-file")
    load_x = torch.load("x-file")
    
  6. 加载和保存模型参数

    这里保存的是模型的参数而不是保存整个模型。 因为模型本身可以包含任意代码,所以模型本身难以序列化。 因此,要想恢复模型,我们需要用代码生成架构, 然后从磁盘加载参数。

    # 保存模型参数
    torch.save(net.state_dict(), 'mlp.params')
    
    # 恢复模型
    clone = MLP() # 先生成模型的架构
    clone.load_state_dict(torch.load('mlp.params')) #再恢复模型的参数
    

卷积神经网络

从全连接层到卷积

空间不变性

  • 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。图像的平移不变性使我们以相同的方式处理局部图像,而不在乎它的位置。
  • 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。局部性意味着计算相应的隐藏表示只需一小部分局部图像像素。

图像卷积

卷积运算

  1. 卷积相关概念

    • 卷积核(convolution kernel),又叫滤波器(filter)、该卷积层的权重,作用是:通过仅查看“输入-输出对”来学习由X生成Y
    • 卷积层
      • 可以指代应用卷积核的网络层
      • 也可以指代图像经过卷积核计算后的输出(即“输出的卷积层”),此时等价于特征映射(feature map),或特征图
    • 卷积层被训练的参数包括:卷积核权重、标量权重
  2. 神经网络中的卷积运算实际对应数学上的互相关运算(cross-correlation)

  3. 感受野(receptive field)

    以图1为例来解释感受野:给定 2 × 2 2\times2 2×2卷积核,阴影输出元素值19的感受野是输入阴影部分的四个元素。假设之前输出为 Y \mathbf{Y} Y, 其大小为 2 × 2 2\times2 2×2,现在我们在其后附加一个卷积层,该卷积层以 Y \mathbf{Y} Y为输入,输出单个元素 z z z。在这种情况下, Y \mathbf{Y} Y上的 z z z的感受野包括 Y \mathbf{Y} Y的所有四个元素,而输入的感受野包括最初所有九个输入元素。因此,当一个特征图中的任意元素需要检测更广区域的输入特征时,我们可以构建一个更深的网络。

  4. 填充(padding):旨在保留边界信息

  5. 步幅(stride):当原始分辨率十分冗余时,加大步幅可以缩减采样次数,加快计算

  6. 怎么确定卷积操作相关的各种值?

    1. 设置卷积核大小(kernel size)——(kh,kw)

      • 通常选奇数1,3,5,7…,目的是:padding通常按照如下规则设置ph=kh-1,pw=kw-1,kernel size选择奇数,ph,pw就能成为偶数,就能使填充时上下填充同样的行数、左右填充同样的列数,比较对称
    2. 设置填充(padding)

      • 目的:通常是为了使输入和输出具有相同的高度和宽度,从而更易预测每个图层的输出形状
      • 一般设置:ph=kh-1,pw=kw-1,这里ph代表上下填充的总行数,pw代表左右填充的总列数
      • 在Python编程中,参数padding通常指的是上或下填充的行数(or 左或右填充的列数),也就是说ph=2xpadding
    3. 设置步长(stride)

      • stride=2,高/宽步长都设置为2,则输入高/宽都减半(输出时)
    4. 求解输出形状
      ⌊ ( n h − k h + p h + s h ) / s h ⌋ × ⌊ ( n w − k w + p w + s w ) / s w ⌋ . \lfloor(n_h-k_h+p_h+s_h)/s_h\rfloor\times\lfloor(n_w-k_w+p_w+s_w)/s_w\rfloor. ⌊(nhkh+ph+sh)/sh×⌊(nwkw+pw+sw)/sw.
      如果设置了 p h = k h − 1 p_h=k_h-1 ph=kh

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值