一、LeNet 概况
- 1990年 Yann LeCun 提出, 在1998 年改进 LeNet-5
- 目标是识别图像中的手写数字, 商用: 自动取款机
- Paper: GradientBased Learning Applied to Document Recognition
MNIST 数据集
- 50000个训练数据
- 10000个测试数据
- 图像大小 28×28、10 类
二、LeNet 网络结构
三、LeNet 的 Pytorch 实现
### 搭建LeNet-5模型
import torch.nn as nn
from torchsummary import summary
class MyLeNet(nn.Module):
# 初始化网络结构
def __init__(self):
super(MyLeNet, self).__init__()
self.layers = nn.Sequential(
# 卷积+BN+激活+池化
nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=0),
nn.BatchNorm2d(6),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
# 卷积+BN+激活+池化
nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, stride=1, padding=0),
nn.BatchNorm2d(16),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
# 全连接层
nn.Flatten(), # 将多维的输入一维化,常用在卷积层到全连接层的过渡
nn.Linear(in_features=16*4*4, out_features=84),
nn.ReLU(),
nn.Linear(in_features=84, out_features=10)
)
# 前向传播
def forward(self, x):
return self.layers(x)
model = MyLeNet()
x = summary(model, input_size=(1, 28, 28))
四、LeNet 总结
LeNet他是将CNN应用于图像分类的开山之作,而且他是一个商用的系统