使用块的网络(VGG)
AlexNet 的网络架构不规则,没有提供一个通用的模板来指导后续的研究人员设计新的网络
VGG 块
经典卷积神经网络的基本组成部分是下面的这个序列:
带填充以保持分辨率的卷积层
非线性激活函数,如 ReLU
池化层,如最大池化层
一个 VGG 块与之类似,由一系列卷积层组成,后面再加上用于空间下采样的最大池化层
实验发现深层且窄的卷积(即 3×3)比较浅层且宽的卷积更有效
VGG 网络
与 AlexNet、LeNet 一样,VGG 网络可以分为两部分:第一部分主要由卷积层和池化层组成,第二部分由全连接层组成。
总结
VGG 使用可重复使用的卷积块来构建深度卷积神经网络
不同的卷积块个数和超参数可以得到不同复杂度的变种
代码实现
定义一个名为vgg_block的函数来实现一个 VGG 块,该函数有三个参数,分别对应于卷积层的数量num_convs、输入通道的数量in_channels和输出通道的数量out_channels:
12345678910111213import torchfrom torch import nnfrom d2l import torch a ...
深度卷积神经网络(AlexNet)
学习表征
在 2012 年前,图像的特征工程是关键,SIFT、SURF、HOG(定向梯度直方图)等特征提取方法占据主导地位
2009 年,ImageNet 数据集发布,图片是自然物体的彩色图片,图片大小为 469×387,样本数为 1.2M,类数为 1000
2021 年 Alex Krizhevsky 提出的一种新的卷积神经网络变体 AlexNet 赢得了 2012 年 ImageNet 竞赛
深度卷积神经网络的突破可归因于数据和硬件两个因素
AlexNet
更深更大的 LeNet
主要改进:Dropout、ReLU、MaxPooling
引领计算机视觉方法论的改变:从“人工特征提取→SVM”到“通过 CNN 学习特征→Softmax 回归”
AlexNet 由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
模型设计
在 AlexNet 的第一层,卷积窗口的形状是11×11。由于 ImageNet 中大多数图像的宽和高比 MNIST 图像的多 10 倍以上,因此需要一个更大的卷积窗口来捕获目标。
第二层中的卷积窗口形状被缩减为 5×5,然后是 3×3。
在第一层 ...
LeNet
MNIST
50000 个训练数据
10000 个测试数据
图像大小 28x28
10 类(0~9)
LeNet
LeNet(LeNet-5)由两个部分组成:
卷积编码器:由两个卷积层组成
全连接层密集块:由三个全连接层组成
每个卷积块中的基本单元是一个卷积层、一个 sigmoid 激活函数和平均池化层。
每个卷积层使用 5×5 卷积核和一个 sigmoid 激活函数。
每个 2×2 池操作通过空间下采样将维数减少 4 倍。
总结
LeNet 是早期成功的卷积神经网络
先使用卷积层来学习图片空间信息
为了构造高性能的卷积神经网络,通常对卷积层进行排列,逐渐降低其表示的空间分辨率,同时增加通道数
使用全连接层来转换到类别的空间
代码实现
LeNet(LeNet-5)由两个部分组成:
卷积编码器和全连接层密集块
12345678910111213141516171819import torchfrom torch import nnfrom d2l import torch as d2lclass Reshape(torch.nn.Module): def forw ...
池化层
卷积结果对位置敏感,以检测垂直边缘为例:
X=[11000110001100011000]\mathbf{X
}=\left[ \begin{array}{ccccc}
1&1&0&0&0\\
1&1&0&0&0\\
1&1&0&0&0\\
1&1&0&0&0\\
\end{array}
\right]
X=⎣⎢⎢⎡11111111000000000000⎦⎥⎥⎤
1 像素的位移就将导致 0 输出
考虑到照明、物体位置、比例、外观等等因图像而异,需要一定的平移不变性
二维最大池化
返回滑动窗口中的最大值
max(0,1,3,4)=4\max(0,1,3,4)=4
max(0,1,3,4)=4
还以检测垂直边缘为例:
X=[11000110001100011000]\mathbf{X
}=\left[ \begin{array}{ccccc}
1&1&am ...
多输入多输出通道
多输入通道
彩色图像可能有 RGB 三个通道,转换为单通道的灰度图像会丢失信息
当输入包含多个通道时,构造一个与输入数据具有相同输入通道数的卷积核,结果是所有通道卷积结果的和
(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56(1 \times 1+2 \times 2+4 \times 3+5 \times 4)+(0 \times 0+1 \times 1+3 \times 2+4 \times 3)=56
(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56
输入 X:ci×nh×nw\mathbf{X}: c_{i} \times n_{h} \times n_{w}X:ci×nh×nw
核 W:ci×kh×kw\mathbf{W}: c_{i} \times k_{h} \times k_{w}W:ci×kh×kw
输出 Y:mh×mw\mathbf{Y}: m_{h} \times m_{w}Y:mh×mw
Y=∑i=0ciXi,:,:⋆Wi,:,:\mathbf{Y}=\sum_{i=0}^{c_{i} ...
填充和步幅
填充
填充(padding):在输入图像的边界填充元素(通常填充元素是 0)
填充 php_hph 行和 pwp_wpw 列,输出形状为:
(nh−kh+ph+1)×(nw−kw+pw+1)\left(n_{h}-k_{h}+p_{h}+1\right) \times\left(n_{w}-k_{w}+p_{w}+1\right)
(nh−kh+ph+1)×(nw−kw+pw+1)
通常取 ph=kh−1,pw=kw−1p_h=k_h-1,p_w=k_w-1ph=kh−1,pw=kw−1
当 khk_hkh 为奇数时在上下两侧填充 ph/2p_h/2ph/2
当 khk_hkh 为偶数时,在上上侧填充 ⌈ph/2⌉\lceil p_h/2\rceil⌈ph/2⌉,在下侧填充 ⌊ph/2⌋\lfloor p_h/2\rfloor⌊ph/2⌋
卷积神经网络中卷积核的高度和宽度通常为奇数,选择奇数的好处是,保持空间维度的同时,可以在顶部和底部填充相同数量的行,在左侧和右侧填充相同数量的列。
步幅
步幅(stride):每次滑动的步长(滑动元素的数量 ...
图像卷积
二维互相关运算
123456789101112import torchfrom torch import nnfrom d2l import torch as d2ldef corr2d(X, K): """计算二维互相关运算。""" h, w = K.shape Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1)) for i in range(Y.shape[0]): for j in range(Y.shape[1]): Y[i, j] = (X[i:i + h, j:j + w] * K).sum() return Y
验证上述二维互相关运算的输出:
123X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])corr2d(X, K)
12tensor([[19., ...
卷积层
二维互相关
0×0+1×1+3×2+4×3=191×0+2×1+4×2+5×3=253×0+4×1+6×2+7×3=374×0+5×1+7×2+8×3=43\begin{aligned}&0 \times 0+1 \times 1+3 \times 2+4 \times 3=19 \\&1 \times 0+2 \times 1+4 \times 2+5 \times 3=25 \\&3 \times 0+4 \times 1+6 \times 2+7 \times 3=37 \\&4 \times 0+5 \times 1+7 \times 2+8 \times 3=43\end{aligned}
0×0+1×1+3×2+4×3=191×0+2×1+4×2+5×3=253×0+4×1+6×2+7×3=374×0+5×1+7×2+8×3=43
二维卷积层
输入 X:nh×nw\mathbf{X}: n_{h} \times n_{w}X:nh×nw
核 W:kh×kw\mathbf{W}: k_{h} \times k_{w}W:kh×k ...
从全连接层到卷积
两个原则
平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。
重新考察全连接层
将输入和输出变形为矩阵(宽度、高度)
将权重变形为 4 维张量
hi,j=∑k,lwi,j,k,lxk,l=∑a,bvi,j,a,bxi+a,j+bh_{i, j}=\sum_{k, l} w_{i, j, k, l} x_{k, l}=\sum_{a, b} v_{i, j, a, b} x_{i+a, j+b}
hi,j=k,l∑wi,j,k,lxk,l=a,b∑vi,j,a,bxi+a,j+b
其中 vvv 是 www 的重新索引,vi,j,a,b=wi,j,i+a,j+bv_{i, j, a, b} =w_{i, j, i+a, j+b}vi,j,a,b=wi,j,i ...
GPU
查看显卡信息
1$ nvidia-smi
123456789101112131415161718192021222324252627Tue Jun 1 15:40:45 2021+-----------------------------------------------------------------------------+| NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. ||==== ...