12.10深度学习_经典神经网络_GoogleNet自我理解

为了更清晰地展示 GoogLeNet 中每个卷积层及其相关参数,我们可以将这些信息整理成表格形式。这不仅有助于理解每一层的输入和输出尺寸,还能直观地看到卷积核的数量、大小、步长以及填充方式等关键参数。以下是 GoogLeNet 前几层(包括两个卷积层和两个最大池化层,以及第一个 Inception 模块)的详细参数表。

GoogLeNet 卷积层参数表

层名称 类型 输入尺寸 输出尺寸 卷积核尺寸 步长 填充 输入通道数 (Channel) 输出通道数 (Num) 备注
conv1 Conv2d 224x224x3 112x112x64 7x7 2 3 3 64 第一个卷积层,使用7x7的大卷积核,步长为2,填充为3,输出64个通道
maxpool1 MaxPooling2d 112x112x64 56x56x64 3x3 2 1 - - 第一个最大池化层,使用3x3的池化核,步长为2,填充为1
conv2 Conv2d 56x56x64 56x56x192 3x3 1 1 64 192 第二个卷积层,使用3x3的卷积核,步长为1,填充为1,输出192个通道
maxpool2 MaxPooling2d 56x56x192 28x28x192 3x3 2 1 - - 第二个最大池化层,使用3x3的池化核,步长为2,填充为1
inception3a Inception Module 28x28x192 28x28x256 多个卷积核 1 1 192 256 第一个Inception模块,包含多个分支,最终输出256个通道

Inception 模块 (inception3a) 详细参数

分支 类型 输入尺寸 输出尺寸 卷积核尺寸 步长 填充 输入通道数 (Channel) 输出通道数 (Num) 备注
branch1 Conv2d + ReLU 28x28x192 28x28x64 1x1 1 0 192 64 使用1x1的卷积核进行降维,输出64个通道
branch2 Conv2d + ReLU + Conv2d + ReLU 28x28x192 28x28x128 1x1, 3x3 1, 1 0, 1 192 96 1x1卷积核降维至96个通道,再通过3x3卷积核扩展到128个通道
branch3 Conv2d + ReLU + Conv2d + ReLU 28x28x192 28x28x32 1x1, 5x5 1, 1 0, 2 192 16 1x1卷积核降维至16个通道,再通过5x5卷积核扩展到32个通道
branch4 MaxPooling2d + Conv2d + ReLU 28x28x192 28x28x32 3x3, 1x1 1, 1 1, 0 - - 3x3最大池化后,通过1x1卷积核降维至32个通道

表格解释

  • 层名称:表示该层在 GoogLeNet 中的具体位置或名称。
  • 类型:指明该层是卷积层(Conv2d)、最大池化层(MaxPooling2d)还是 Inception 模块。
  • 输入尺寸 :表示该层接收的输入特征图的尺寸,格式为 高度x宽度x通道数
  • 输出尺寸 :表示该层产生的输出特征图的尺寸,格式为 高度x宽度x通道数
  • 卷积核尺寸:对于卷积层,表示使用的卷积核的尺寸;对于 Inception 模块,表示该模块内不同分支使用的卷积核尺寸。
  • 步长:表示卷积或池化操作时的步长。
  • 填充 :表示卷积或池化操作时的填充方式,通常为 01
  • 输入通道数 (Channel):表示该层接收的输入特征图的通道数。
  • 输出通道数 (Num):表示该层产生的输出特征图的通道数。
  • 备注:提供额外的说明或解释,帮助理解该层的设计意图。

代码实现示例

python 复制代码
import torch.nn as nn

class Inception(nn.Module):
    def __init__(self, in_channels, ch1x1, ch3x3red, ch3x3, ch5x5red, ch5x5, pool_proj):
        super(Inception, self).__init__()
        self.branch1 = nn.Conv2d(in_channels, ch1x1, kernel_size=1)
        self.branch2 = nn.Sequential(
            nn.Conv2d(in_channels, ch3x3red, kernel_size=1),
            nn.ReLU(),
            nn.Conv2d(ch3x3red, ch3x3, kernel_size=3, padding=1)
        )
        self.branch3 = nn.Sequential(
            nn.Conv2d(in_channels, ch5x5red, kernel_size=1),
            nn.ReLU(),
            nn.Conv2d(ch5x5red, ch5x5, kernel_size=5, padding=2)
        )
        self.branch4 = nn.Sequential(
            nn.MaxPool2d(kernel_size=3, stride=1, padding=1),
            nn.Conv2d(in_channels, pool_proj, kernel_size=1)
        )

    def forward(self, x):
        branch1 = self.branch1(x)
        branch2 = self.branch2(x)
        branch3 = self.branch3(x)
        branch4 = self.branch4(x)
        outputs = [branch1, branch2, branch3, branch4]
        return torch.cat(outputs, 1)

class GoogLeNet(nn.Module):
    def __init__(self, num_classes=1000):
        super(GoogLeNet, self).__init__()

        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3)
        self.maxpool1 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

        self.conv2 = nn.Conv2d(64, 192, kernel_size=3, padding=1)
        self.maxpool2 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

        self.inception3a = Inception(192, 64, 96, 128, 16, 32, 32)

    def forward(self, x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.inception3a(x)
        return x

总结

通过上述表格,我们可以清楚地看到 GoogLeNet 的前几层是如何逐步处理输入图像的。每个卷积层和池化层都有明确的参数设置,确保了网络能够有效地提取特征并减少计算量。特别是 Inception 模块的设计,通过引入不同大小的卷积核和池化操作,使得网络能够在多个尺度上捕捉图像特征,同时利用1x1卷积核进行降维,减少了参数数量,提高了计算效率。

相关推荐
白-胖-子29 分钟前
深入剖析大模型在文本生成式 AI 产品架构中的核心地位
人工智能·架构
想要成为计算机高手2 小时前
11. isaacsim4.2教程-Transform 树与Odometry
人工智能·机器人·自动驾驶·ros·rviz·isaac sim·仿真环境
静心问道2 小时前
InstructBLIP:通过指令微调迈向通用视觉-语言模型
人工智能·多模态·ai技术应用
宇称不守恒4.03 小时前
2025暑期—06神经网络-常见网络2
网络·人工智能·神经网络
小楓12013 小时前
醫護行業在未來會被AI淘汰嗎?
人工智能·醫療·護理·職業
数据与人工智能律师3 小时前
数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
大数据·网络·人工智能·云计算·区块链
chenchihwen3 小时前
大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
人工智能·学习
说私域4 小时前
公域流量向私域流量转化策略研究——基于开源AI智能客服、AI智能名片与S2B2C商城小程序的融合应用
人工智能·小程序
Java樱木4 小时前
AI 编程工具 Trae 重要的升级。。。
人工智能
码字的字节4 小时前
深度学习损失函数的设计哲学:从交叉熵到Huber损失的深入探索
深度学习·交叉熵·huber