当前位置: 首页 > news >正文

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

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

GoogLeNet 卷积层参数表

层名称类型输入尺寸输出尺寸卷积核尺寸步长填充输入通道数 (Channel)输出通道数 (Num)备注
conv1Conv2d224x224x3112x112x647x723364第一个卷积层,使用7x7的大卷积核,步长为2,填充为3,输出64个通道
maxpool1MaxPooling2d112x112x6456x56x643x321--第一个最大池化层,使用3x3的池化核,步长为2,填充为1
conv2Conv2d56x56x6456x56x1923x31164192第二个卷积层,使用3x3的卷积核,步长为1,填充为1,输出192个通道
maxpool2MaxPooling2d56x56x19228x28x1923x321--第二个最大池化层,使用3x3的池化核,步长为2,填充为1
inception3aInception Module28x28x19228x28x256多个卷积核11192256第一个Inception模块,包含多个分支,最终输出256个通道

Inception 模块 (inception3a) 详细参数

分支类型输入尺寸输出尺寸卷积核尺寸步长填充输入通道数 (Channel)输出通道数 (Num)备注
branch1Conv2d + ReLU28x28x19228x28x641x11019264使用1x1的卷积核进行降维,输出64个通道
branch2Conv2d + ReLU + Conv2d + ReLU28x28x19228x28x1281x1, 3x31, 10, 1192961x1卷积核降维至96个通道,再通过3x3卷积核扩展到128个通道
branch3Conv2d + ReLU + Conv2d + ReLU28x28x19228x28x321x1, 5x51, 10, 2192161x1卷积核降维至16个通道,再通过5x5卷积核扩展到32个通道
branch4MaxPooling2d + Conv2d + ReLU28x28x19228x28x323x3, 1x11, 11, 0--3x3最大池化后,通过1x1卷积核降维至32个通道

表格解释

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

代码实现示例

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

http://www.lryc.cn/news/503663.html

相关文章:

  • 漫谈 Vercel Serverless 函数
  • Nacos系列:Nacos 控制台手册
  • react-dnd 拖拽事件与输入框的文本选中冲突
  • LeetCode:150. 逆波兰表达式求值
  • python中向量指的是什么意思
  • 7.Vue------$refs与$el详解 ------vue知识积累
  • 一个很好的直接网站操作的回测框架
  • 【电子元器件】贴片电阻的故障现象、故障原理和解决方法
  • 基于Spring Boot + Vue的摄影师分享交流社区的设计与实现
  • SpringBoot项目监听端口接受数据(Netty版)
  • 超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题
  • 如何使用 Python 写入文本文件 ?
  • 07篇(附)--仿射变换矩阵
  • KubeSphere搭建单节点RocketMQ
  • 深度学习中损失函数(loss function)介绍
  • Vue3+Node中使用webrtc推流至mediamtx
  • React 内置的Hook学习
  • Flutter Navigator2.0的原理和Web端实践
  • 初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容
  • 【HF设计模式】03-装饰者模式
  • 【人工智能-中级】模型部署与优化:从本地实验到云端与边缘部署
  • Jenkins 编写Pipeline 简介及使用初识详解
  • uboot移植网络驱动过程,无法ping通mx6ull和ubuntu问题解决方案
  • 精准预测美国失业率和贫困率,谷歌人口动态基础模型PDFM已开源,可增强现有地理空间模型
  • C#速成(文件读、写操作)
  • SQL server学习03-创建和管理数据表
  • 【UE5 “RuntimeLoadFbx”插件】运行时加载FBX模型
  • 【潜意识Java】深入理解 Java 面向对象编程(OOP)
  • windows同时使用多个网卡
  • Spark执行计划解析后是如何触发执行的?