深度学习-CNN网络改进版LetNet5
深度学习中,经典网络引领一波又一波的技术革命,从LetNet到当前最火的GPT所用的Transformer,它们把AI技术不断推向高潮。
用pytorch构建CNN经典网络模型改进版LetNet5,还可以用数据进行训练模型,得到一个优化的模型。
数据分析
经典算法
LeNet5概述
LeNet诞生后,于1998年改进版本LeNet5,在LeNet初期版本上迭代进化而来。卷积核大小为5x5。
网络结构
输入图像分辨率:32x32 单通道
结构:
7层(不含输入),包括3层卷积层,2层池化层,2层全连接层
(1)卷积层1:5x5 --->输出6个28×28大小的特征图;
(2)池化层1:平均池化层 2x2;
(3)卷积层2:5x5 --->输出16个10x10大小的特征图;
(4)池化层2:2x2
(5)卷积层3:5x5 --->输出120个1x1大小的特征图;
(6)全连接层1 ----> 输出84特征;
(7)全连接层2 ----> 输出
优势与不足
优势:采用CNN自动提取特征,具备卷积神经网络的雏形,网络层级由5层增加为7层,图像尺寸由28x28扩大32x32。
不足:使用了平均池化,一般而言,不如Max-Pooling提取特征具有分类辨识度。
Pytorch实现
以下便是使用Pytorch实现的经典网络结构LeNet5
python
class LeNet5(nn.Module):
def __init__(self, num_classes, grayscale=False):
"""
num_classes: 分类的数量
grayscale:是否为灰度图
"""
super(LeNet5, self).__init__()
self.grayscale = grayscale
self.num_classes = num_classes
if self.grayscale: # 可以适用单通道和三通道的图像
in_channels = 1
else:
in_channels = 3
# 卷积神经网络
self.features = nn.Sequential(
nn.Conv2d(in_channels, 6, kernel_size=5),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2),
nn.Conv2d(6, 16, kernel_size=5),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2) # 原始的模型使用的是 平均池化
)
# 分类器
self.classifier = nn.Sequential(
nn.Linear(16*5*5, 120), # 这里把第三个卷积当作是全连接层了
nn.ReLU(),
nn.Linear(120, 84),
nn.ReLU(),
nn.Linear(84, num_classes)
)
def forward(self, x):
x = self.features(x) # 输出 16*5*5 特征图
x = torch.flatten(x, 1) # 展平 (1, 16*5*5)
logits = self.classifier(x) # 输出 10
probas = F.softmax(logits, dim=1)
return logits, probas
大家可以和LetNet对照差异,也可以一窥DeepLearning技术的突破点。
后来CNN网络结构不断发展,为深度学习在计算机视觉的蓬勃发展奠定基础。
觉得有用 收藏 收藏 收藏
点个赞 点个赞 点个赞
End
GPT专栏文章:
GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案
GPT实战系列-LangChain + ChatGLM3构建天气查询助手
GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)
GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案