动手学深度学习之卷积神经网络LeNet
1. 卷积层与全连接层对比
卷积层VS全连接层:模型更简洁;参数更少;计算成本高(每个参数都参与更多的乘法)
2. LeNet网络简述
LeNet定义:最早发布的卷积神经网络,目标是识别图像中的手写数字,在当时识别精度与支持向量机(SVM)相当,广泛应用于自动取款机中。
组成部分:
- 卷积编码器: 两个卷积层
- 全连接层密集块:三个全连接层
卷积块的基本单元:卷积层;激活函数;池化层
3. 代码实现(基于pytorch)
import torch
from torch import nn
from d2l import torch as d2l
class Reshape(torch.nn.Module):
def forward(self, x):
# print('test',x.view(-1,1,28,28))
return x.view(-1, 1, 28, 28) # 参数中的-1通过其它位置的数据来推断
# 卷积层: 通道数目增加
# 池化层: 限制高宽
net = torch.nn.Sequential(Reshape(), nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
nn.AvgPool2d(kernel_size=2, stride=2), nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(), # nn.Conv2d(6, 16, kernel_size=5)
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))
# 调整参数1: 将平均池化层改为最大池化层
# net = torch.nn.Sequential(Resh