AlexNet,ZFNet详解

1 AlexNet

网络结构

对于AlexNet网络来说,因为当时资源环境受限,他从第一步卷积开始就把一个图像分到两个GPU上训练,然后中间进行组合最后进行融合成全连接成1000个置信度

1 得到一张3x224x224的图像,然后进行11x11的卷积,卷积两次,分别分配到不同的GPU上

分别得到,两个48x55x55的feature map,然后进行最大池化操作从48x55x55变成48x27x27

2 分别进行相同的卷积,使用5x5卷积,不改变feature map的尺寸,只改变其通道数,从48x27x27变成128x27x27,然后进行最大池化操作从128x27x27变成128x13x13

3 然后两个feature map进行融合,然后继续分成两个,每一个的尺寸从 128x13x13变成 256x13x13,然后分别再进行3x3卷积,也不改变feature map的尺寸,只改变其通道数,从256x13x13 变成 192x13x13

4 两个分别进行两次卷积,不改变feature map的尺寸,只改变其通道数,最后从192x13x13变成128x13x13,然后再进行一次最大池化操作128x13x13变成128x6x6

5 然后合并进行全连接线性转换,再分成两个,具体不用讲了,看图可知

下面就是具体操作,其中下面两个11x11是分成了两个,然后后面其他的操作都一样所以放一块了直接写,合并里面并没有写

其中,还有一个东西没有写,局部响应归一化

Local Response Normalization(LRN, 局部响应归一化), 主要是对ReLU激活函数的输出进行局部归一化操作(和LN差不多),我觉得知道作用就行
LRN归一化: 对局部神经元的活动创建了竞争机制, 使得其中响应比较大的值变得相对更大,并抑制其它反馈较小的神经元, 增强了模型的泛化能力。 本质上, LRN是仿造生物学上活跃的神经元对于相邻神经元的抑制现象 (侧抑制) 。

2 ZFNet

基于AlexNet进行微调 ,修改窗口大小和步长 ,使用稠密单GPU的网络结构替换AlexNet的稀疏双GPU结构,如下图:
网络结构跟AlexNet类似,就是变成了从AlexNet的两个GPU变成了一个GPU的结构,更加容易理解和复现,具体代码复现:
import torch
import torch.nn as nnclass ZFNet(nn.Module):def __init__(self):super(ZFNet, self).__init__()self.features = nn.Sequential(nn.Conv2d(in_channels=3, out_channels=96, kernel_size=(7, 7), stride=(2, 2), padding=1),nn.ReLU(),nn.LocalResponseNorm(size=30),nn.MaxPool2d(kernel_size=(3, 3), stride=(2, 2), padding=1),nn.Conv2d(in_channels=96, out_channels=256, kernel_size=(5, 5), stride=(2, 2), padding=0),nn.ReLU(),nn.LocalResponseNorm(size=50),nn.MaxPool2d(kernel_size=(3, 3), stride=(2, 2), padding=1),nn.Conv2d(256, 384, kernel_size=(3, 3), stride=(1, 1), padding='same'),nn.ReLU(),nn.Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding='same'),nn.ReLU(),nn.Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding='same'),nn.ReLU(),nn.MaxPool2d(kernel_size=(3, 3), stride=(2, 2)))self.classify = nn.Sequential(nn.Linear(6 * 6 * 256, 4096),nn.ReLU(),nn.Linear(4096, 4096),nn.ReLU(),nn.Linear(4096, 1000))def forward(self, x):""":param x: 原始图像数据, [N,1,224,224]:return:"""z = self.features(x)  # [N,1,224,224] -> [N,256,6,6]z = z.view(-1, 256 * 6 * 6)  # reshapez = self.classify(z)return zif __name__ == '__main__':net = ZFNet()img = torch.randn(2, 3, 224, 224)scores = net(img)print(scores)probs = torch.softmax(scores, dim=1)  # 求解概率值print(probs)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/651475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山海鲸智慧医疗解决方案:让医疗数据说话

在医疗领域,数据可视化对于提高诊疗效率、辅助医学研究和提升患者就医体验具有重要意义。作为山海鲸可视化软件的开发者,我们致力于利用先进的数据可视化技术,为医疗行业提供高效、智能的解决方案,本篇文章就带大家一起了解一下这…

【Linux】开始使用 vim 吧!!!

Linux 1 what is vim ?2 vim基本概念3 vim的基本操作 !3.1 vim的快捷方式3.1.1 复制与粘贴3.1.2 撤销与剪切3.1.3 字符操作 3.2 vim的光标操作3.3 vim的文件操作 总结Thanks♪(・ω・)ノ感谢阅读下一篇文章见!…

Power ModeII 插件的下载与使用-----idea

下载 Marketplace里面搜索下载即可 使用 下载后重启软件就可以用了 下面是一些关于Power ModeII ,我的个性化设置截图 以及相关设置解释 插件或扩展的设置面板【用于给代码编辑器或集成开发环境(IDE)添加视觉效果】 主要设置 ENTER POWE…

数学知识第三期 欧拉函数

前言 相信大家在高中的时候接触过欧拉函数,希望大家通过本篇文章能够进一步理解欧拉函数!!! 一、什么是欧拉函数? 欧拉函数是一个在数论中用于描述特定正整数的互质数的概念。具体来说,对于一个正整数n&…

华为机考入门python3--(0)模拟题3-计算字符串重新排列数

分类:排列组合 知识点: 计算字符串中每个字符出现的次数 Counter(string) 计算列表中每个元素出现的次数 Counter(list) 阶乘 math.factorial(num) 排列去重 题目来自【华为招聘模拟考试】 先把每个字符当成唯一出现过一次,计算所有排列…

keepalived+nginx双主热备(有问题私信)

keepalivednginx双主热备 前言keepalivednginx双主热备keepalivednginx双主热备部署安装nginx安装keepalived修改master节点的keepalived配置文件 修改backup节点的keeepalived配置文件配置keepalived主备配置keepalived双主热备 前言 有关keepalived和nginx的一些工作原理&am…

【论文笔记】《Learning Deconvolution Network for Semantic Segmentation》

重要说明:严格来说,论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍,请参考另一篇博客:什么是Deconvolutional Network? 一、参考资料 Learning Deconvolution Netwo…

【Leetcode】2861. 最大合金数

文章目录 题目思路代码结果 题目 题目链接 假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。 对于第 i 台…

【word visio绘图】关闭visio两线交叉的跳线(跨线)

【visio绘图】关闭visio两线交叉的跳线(跨线) 1 如何在Visio绘图中关闭visio两线交叉的跳线(跨线)第一步:打开Visio并创建您的图形第二步:绘制您的连接线第三步:关闭跳线第四步:手动…

dnSpy调试工具二次开发2-输出日志到控制台

本文在上一篇文章的基础上继续操作: dnSpy调试工具二次开发1-新增菜单-CSDN博客 经过阅读dnSpy的源码,发现dnSpy使用到的依赖注入用了MEF框架,所以在源码中可以看到接口服务类的上面都打上了Export的特性或在构造方法上面打上ImportingConst…

C/C++ - 类的封装特性

目录 类的封装 语法格式 声明定义 分文件 访问权限 类作用域 对象模型 构造函数 默认构造函数 带参构造函数 拷贝构造函数 构造函数重载 委托构造函数 初始数据列表 构造默认参数 构造函数删除 析构函数 析构函数概念 析构函数特性 析构函数示例 析构调用…

坚持刷题 | 平衡二叉树

文章目录 题目考察点代码实现实现总结对实现进一步改进扩展提问 坚持刷题,老年痴呆追不上我,今天继续二叉树:平衡二叉树 题目 110.平衡二叉树 考察点 递归能力: 能否使用递归来解决问题。树的基本操作:能否正确地访…

DS:带头双向循环链表的实现(超详细!!)

创作不易,友友们给个三连吧!!! 博主的上篇文章介绍了链表,以及单链表的实现。 单链表的实现(超详细!!) 其实单链表的全称叫做不带头单向不循环链表,本文…

zabbix使用自动发现批量监控服务器

当有大量新增服务器需要监控时,为避免一台一台手动操作浪费人力,我们使用自动发现功能来进行操作: 以下以zabbix6.4.0版本为例 如下,点击自动发现,创建发现规则: 点击更新,保存,之后点告警---…

在 React 组件中使用 JSON 数据文件,怎么去读取请求数据呢?

要在 React 组件中使用 JSON 数据&#xff0c;有多种方法。 常用的有以下几种方法&#xff1a; 1、直接将 JSON 数据作为一个变量或常量引入组件中。 import jsonData from ./data.json;function MyComponent() {return (<div><h1>{jsonData.title}</h1>&…

node.js Redis SETNX命令实现分布式锁解决超卖/定时任务重复执行问题

Redis SETNX 特性 当然&#xff0c;让我们通过一个简单的例子&#xff0c;使用 Redis CLI&#xff08;命令行界面&#xff09;来模拟获取锁和释放锁的过程。 在此示例中&#xff0c;我将使用键“lock:tcaccount_[pk]”和“status:tcaccount_[pk]”分别表示锁定键和状态键。 获…

AAC解码算法原理

关于更多音视频开发内容&#xff0c;请参考专栏音视频开发 AAC&#xff08;Advanced Audio Coding&#xff09;是一种高级音频编码标准&#xff0c;它是一种十分流行的音频压缩格式&#xff0c;通常用于存储和传输音频数据。AAC提供了高音质和高压缩效率&#xff0c;广泛应用于…

Android源码设计模式解析与实战第2版笔记(四)

第三章 自由扩展你的项目–Builder 模式 Builder 模式的定义 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 Builder 模式的使用场景 相同的方法&#xff0c;不同的执行顺序&#xff0c;产生不同的事件结果时 多个部件或零件&…

Android 基础技术——Handler

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 Handler 为什么一个线程对应一个Looper&#xff1f; 核心&#xff1a;通过ThreadLocal保证 Looper.prepare的时候&#xff0c;ThreadLocal.get如果不空报异常&#xff1b;否则调用ThreadLocal.set,…

Cesium渲染白膜数据

async DrawBaiMoFun2() {// tiles 矩阵变换let changePostion = (tileSet, tx, ty, tz, rx, ry, rz, scale, center) => {if (!center) return;const m = Cesium.Transforms.eastNorthUpToFixedFrame(center);const surface =center ||Cesium.Cartesian3.fromRadians(cartog…