1、1998年LeCun
推出了LeNet
网络,它是第一个广为流传的卷积神经网络。
![](https://www.mingliumengshao.com/wp-content/uploads/2023/08/image.png)
2、LeNet
网络包含了卷积层、池化层、全连接层,这些都是现代CNN
网络的基本组件。
- 输入层:二维图像,尺寸为
32x32
。 C1、C3、C5
层:二维卷积层。其中C5
将输入的feature map
(尺寸16@5x5
)转化为尺寸为120x1x1
的feature map
,然后转换为长度为120
的一维向量。这是一种常见的、将卷积层的输出转换为全连接层的输入的一种方法。S2、S4
层:池化层。使用sigmoid
函数作为激活函数。后续的CNN
都使用ReLU
作为激活函数。F6
层:全连接层。- 输出层:由欧式径向基函数单元组成。后续的
CNN
使用softmax
输出单元。下表中,@
分隔了通道数量和feature map
的宽、高。
网络层 | 核/池大小 | 核数量 | 步长 | 输入尺寸 | 输出尺寸 |
INPUT | – | – | – | – | 1@32×32 |
C1 | 5×5 | 6 | 1 | 1@32×32 | 6@28×28 |
S2 | 2×2 | – | 2 | 6@28×28 | 6@14×14 |
C3 | 5×5 | 16 | 1 | 6@14×14 | 16@10×10 |
S4 | 2×2 | – | 2 | 16@10×10 | 16@5×5 |
C5 | 5×5 | 120 | 1 | 16@5×5 | 120@1×1 |
F6 | – | – | – | 120 | 84 |
OUTPUT | – | – | – | 84 | 10 |
3、网络实现
接下来用Python+Pytorch来搭建LeNet-5,实例化一个Sequential来连接所有的层:
net=nn.Sequential(
nn.Conv2d(1,6,kernel_size=(5,5)),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2,stride=2),
nn.Conv2d(6,16,kernel_size=(5,5)),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2,stride=2),
nn.Flatten(),
nn.Linear(16*5*5,120),nn.Sigmoid(),
nn.Linear(120,84),nn.Sigmoid(),
nn.Linear(84,10)
为了检查搭建的网络是否正确,可以给net输入一个32 x 32的矩阵来检查每层的输出:
X=torch.rand((1,1,32,32),dtype=torch.float32)
for layer in net:
X=layer(X)
print(layer.__class__.__name__,'out shape:\t',X.shape)
运行结果如下:
Conv2d out shape: torch.Size([1, 6, 28, 28])
Sigmoid out shape: torch.Size([1, 6, 28, 28])
AvgPool2d out shape: torch.Size([1, 6, 14, 14])
Conv2d out shape: torch.Size([1, 16, 10, 10])
Sigmoid out shape: torch.Size([1, 16, 10, 10])
AvgPool2d out shape: torch.Size([1, 16, 5, 5])
Flatten out shape: torch.Size([1, 400])
Linear out shape: torch.Size([1, 120])
Sigmoid out shape: torch.Size([1, 120])
Linear out shape: torch.Size([1, 84])
Sigmoid out shape: torch.Size([1, 84])
Linear out shape: torch.Size([1, 10])
说明:
Conv2d out shape:卷积层输出图像的高/宽可以用下面公式计算:
h ′ = ( h + 2 ∗ padding − h 1 ) / stride + 1
w ′ = ( w + 2 ∗ padding − w 1 ) / stride + 1
h/w是输入图像的高/宽,padding是填充,stride是步幅,在卷积层中一般为1,h1/w1是卷积核的高/宽。第一个卷积层输入32 x 32,所以输出=32+2×0-5+1=28;卷积层输出图像的通道数跟卷积核的数目相同,由于第一个卷积层有6个卷积核,因此输出图像有6个通道;最后输出图像(6 X 28 X 28)。池化层输出图像的图像通道数不变,高/宽计算方式跟卷积层输出图像的高/宽一样。
参考:
1、CNN:图像分类(https://www.huaxiaozhuan.com/)
2、卷积神经网络之LeNet(一)(CSDN)