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 模块,表示该模块内不同分支使用的卷积核尺寸。
- 步长:表示卷积或池化操作时的步长。
- 填充:表示卷积或池化操作时的填充方式,通常为
0或1。 - 输入通道数 (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卷积核进行降维,减少了参数数量,提高了计算效率。
相关文章:
12.10深度学习_经典神经网络_GoogleNet自我理解
为了更清晰地展示 GoogLeNet 中每个卷积层及其相关参数,我们可以将这些信息整理成表格形式。这不仅有助于理解每一层的输入和输出尺寸,还能直观地看到卷积核的数量、大小、步长以及填充方式等关键参数。以下是 GoogLeNet 前几层(包括两个卷积…...
漫谈 Vercel Serverless 函数
我们需要明白什么是 Serverless。顾名思义,Serverless 并不是没有服务器,而是 “不需要你管理服务器”。就像你去超市买东西,不用自己去种菜、养鸡,直接挑选、付款就好。Vercel 的 Serverless 函数也是类似的,它帮你自…...
Nacos系列:Nacos 控制台手册
引言 Nacos是阿里巴巴中间件部门开源的一款用于服务发现和配置管理的产品,Nacos 控制台主要旨在于增强对于服务列表、健康状态管理、服务治理、分布式配置管理等方面的管控能力,以便进一步帮助用户降低管理微服务应用架构的成本。 一、访问 Nacos 控制台…...
react-dnd 拖拽事件与输入框的文本选中冲突
问题描述 当我们使用拖拽库的时候,往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点,当拖拽的事件绑定在该元素身上时候,发现子孙的输入框不能进行文本选中了,会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…...
LeetCode:150. 逆波兰表达式求值
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表…...
python中向量指的是什么意思
一、向量是什么 在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度&am…...
7.Vue------$refs与$el详解 ------vue知识积累
$refs 与 $el是什么? 作用是什么? ref,$refs,$el ,三者之间的关系是什么? ref (给元素或者子组件注册引用信息) 就像你要给元素设置样式,就需要先给元素设定一个 class 一样,同理,…...
一个很好的直接网站操作的回测框架
1 网址 https://cn.tradingview.com/...
【电子元器件】贴片电阻的故障现象、故障原理和解决方法
本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、故障现象概要 贴片电阻与其他电子元器件相比,虽然属于比较不容易引发故障的零部件,但是在过载或…...
基于Spring Boot + Vue的摄影师分享交流社区的设计与实现
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
SpringBoot项目监听端口接受数据(Netty版)
文章目录 前言服务端相关配置核心代码 客户端 前言 前言 环境: JDK:64位 Jdk1.8 SpringBoot:2.1.7.RELEASE Netty:4.1.39.Final 功能: 使用Netty监听端口接受客户端的数据,并发送数据给客户端。 服务端 …...
超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题
寄存器重命名 重命名映射表基于 SRAM 的重命名映射表 超标量处理器的寄存器重命名解决 RAW 相关性解决 WAW 相关性对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)对写 ROB 进行检查(判断) 特殊指令处理方式 重命名映射表 重命名时…...
如何使用 Python 写入文本文件 ?
在Python编程中,写入文本文件是一项基本且重要的操作。 无论是生成日志文件、配置文件,还是进行数据输出,都需要用到这一技能。 下面,我将详细介绍如何使用Python写入文本文件,并提供一些实际开发中的建议和注意事项…...
07篇(附)--仿射变换矩阵
此篇献给某些 头铁 的小只因们,认真钻研下面的数学式吧 原理示例 首先我们以最简单的一个点的旋转为例子,且以最简单的情况举例,令旋转中心为坐标系中心O(0,0),假设有一点P0(x0,y0)࿰…...
KubeSphere搭建单节点RocketMQ
前提环境: Docker环境 Harbor仓库(可选) 参考官方文档: 《Docker 部署 RocketMQ》 https://rocketmq.apache.org/zh/docs/quickStart/02quickstartWithDocker参考官方文档: 《RocketMQ Dashboard》 https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboard/ 声…...
深度学习中损失函数(loss function)介绍
深度学习中损失函数(loss function)介绍 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...
Vue3+Node中使用webrtc推流至mediamtx
前言 项目的 Web 端是 Vue3 框架,后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端,而我自己从未有媒体流相关经验,最初 leader 让我尝试通过 RTSP 协议推拉流,我的思路就局限在了 RTSP 方向。 最初使用的服务端…...
React 内置的Hook学习
useState:管理组件状态 useState 是一个用于在函数组件中添加状态的 Hook。它允许你在函数组件中声明一个状态变量,并提供一个更新该状态的方法,其中与组件生命周期的关系: 初始化:当组件首次渲染时,useS…...
Flutter Navigator2.0的原理和Web端实践
01 背景与动机 在Navigator 2.0推出之前,Flutter主要通过Navigator 1.0和其提供的 API(如push(), pop(), pushNamed()等)来管理页面路由。然而,Navigator 1.0存在一些局限性,如难以实现复杂的页面操作(如移…...
初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容
uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
