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卷积核进行降维,减少了参数数量,提高了计算效率。

相关推荐
香港科大商学院内地办事处5 分钟前
港科夜闻 | 香港科大与荷兰代尔夫特理工大学(TU Delft)建立合作伙伴关系,推动艺术科技教育与研究...
大数据·人工智能·科技
威化饼的一隅7 分钟前
【多模态】MiniCPM-V多模态大模型使用学习
深度学习·多模态·视觉语言模型·多模态模型·minicpm·minicpm-v
威化饼的一隅9 分钟前
【多模态】swift框架使用qwen2-vl
人工智能·深度学习·大模型·swift·多模态模型·qwen2-vl
灵魂画师向阳28 分钟前
AI绘画,重拾手绘——结合Stable Diffusion辅助设计之 景观 学习笔记!
人工智能·学习·ai作画·stable diffusion·ai绘画·sd
GOTXX42 分钟前
【无人机】无人机测绘路径优化策略与实践:探索高效、精准的测绘技术路径
人工智能·python·目标检测·机器学习·计算机视觉·无人机
IT猿手1 小时前
基于RRT(Rapidly-exploring Random Tree)的无人机三维路径规划,MATLAB代码
开发语言·人工智能·深度学习·matlab·机器人·无人机·智能优化算法
AI_Mind1 小时前
浅谈大模型之Agent(下篇)
大数据·人工智能·深度学习
前网易架构师-高司机2 小时前
健康的玉米叶病害数据集,玉米识别数据集,对原始图片进行yolov,coco,voc格式标注
人工智能·机器学习
李卓璐2 小时前
NLP-Huggingface基本使用方法
人工智能·自然语言处理