2. 卷积神经网络无法绕开的神——LeNet

卷积神经网络无法绕开的大神------LeNet

  • [1. 基本架构](#1. 基本架构)
  • [2. LeNet 5](#2. LeNet 5)
  • [3. LeNet 5 代码](#3. LeNet 5 代码)

1. 基本架构

  • 特征抽取模块
  • 可学习的分类器模块

2. LeNet 5

  • LeNet 5: 5 表示的是5个核心层,2个卷积层,3个全连接层.
  • 核心权重层:卷积层、全连接层、循环层,Batchnorm / Dropout 这些都属于附属层。
  • Convolutions, 32×32 → 28×28:卷积过后,图像像素损失了4个,是因为 kernal_size是5×5. 那个年代是不补零的。
  • Subsampling: 亚采样,也叫池化层,池化一次,图像大小缩小一般,层数不变。
  • 卷积负责把图像层数变得越来越多,池化负责把图像变得越来越小。最后使用全连接,输出类别。

3. LeNet 5 代码

python 复制代码
import torch
from torch import nn


class ConvBlock(nn.Module):
    """
        一层卷积:
            - 卷积层
            - 批规范化层
            - 激活层
    """
    def __init__(self, in_channels, out_channels, 
                 kernel_size=3, stride=1, padding=1):
        super().__init__()
        self.conv = nn.Conv2d(in_channels=in_channels, out_channels=out_channels,
                             kernel_size=kernel_size, stride=stride,padding=padding)
        self.bn = nn.BatchNorm2d(num_features=out_channels)
        self.relu = nn.ReLU()
    
    def forward(self, x):
        x = self.conv(x)
        x = self.bn(x)
        x = self.relu(x)
        return x

class LeNet(nn.Module):
    def __init__(self):
        super().__init__()
        # 1, 特征抽取部分
        self.feature_extractor = nn.Sequential(
            # 卷积层1
            ConvBlock(in_channels=1, 
                      out_channels=6, 
                      kernel_size=5,
                      stride=1,
                      padding=0),
            
            # 亚采样(池化)
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
            
            # 卷积层2
            ConvBlock(in_channels=6, 
                      out_channels=16, 
                      kernel_size=5,
                      stride=1,
                      padding=0),
            
            # 亚采样(池化)
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
            
        )
        
        # 2, 分类
        self.classifier = nn.Sequential(
            nn.Flatten(),
            nn.Linear(in_features=400, out_features=120),
            nn.ReLU(),
            nn.Linear(in_features=120, out_features=84),
            nn.ReLU(),
            nn.Linear(in_features=84, out_features=10)
        )
        
    def forward(self, x):
        # 1, 提取特征
        x = self.feature_extractor(x)
        # 2, 分类输出
        x = self.classifier(x)
        return x
    

if __name__ == "__main__":
    model = LeNet()
    print(model)
    x = torch.randn(1, 1, 32, 32)
    y = model(x)
    print(y.shape)
相关推荐
强化学习与机器人控制仿真8 小时前
Meta 最新开源 SAM 3 图像视频可提示分割模型
人工智能·深度学习·神经网络·opencv·目标检测·计算机视觉·目标跟踪
WWZZ20259 小时前
快速上手大模型:深度学习5(实践:过、欠拟合)
人工智能·深度学习·神经网络·算法·机器人·大模型·具身智能
vvoennvv9 小时前
【Python TensorFlow】 BiTCN-LSTM双向时间序列卷积长短期记忆神经网络时序预测算法(附代码)
python·神经网络·tensorflow·lstm·tcn
夏洛克信徒10 小时前
从 “工具” 到 “代理”:Gemini 3.0 重构 AI 能力边界,开启智能协作新纪元
大数据·人工智能·神经网络
limenga10215 小时前
奇异值分解(SVD):深度理解神经网络的内在结构
人工智能·深度学习·神经网络·机器学习
Learn Beyond Limits21 小时前
Correlation vs Cosine vs Euclidean Distance|相关性vs余弦相似度vs欧氏距离
人工智能·python·神经网络·机器学习·ai·数据挖掘
2301_812914871 天前
简单神经网络
人工智能·深度学习·神经网络
WWZZ20251 天前
快速上手大模型:深度学习10(卷积神经网络2、模型训练实践、批量归一化)
人工智能·深度学习·神经网络·算法·机器人·大模型·具身智能
chao1898441 天前
基于BP神经网络的故障分类MATLAB实现
神经网络·matlab·分类
WWZZ20252 天前
快速上手大模型:深度学习9(池化层、卷积神经网络1)
人工智能·深度学习·神经网络·算法·机器人·大模型·具身智能