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

深度学习Day-24:ResNeXt-50算法思考

  🍨 本文为:[🔗365天深度学习训练营] 中的学习记录博客
 🍖 原作者:[K同学啊 | 接辅导、项目定制]

要求:

  1. 阅读给出代码,判断是否存在错误,正确与否都请给出你的思考;
  2. 查找相关资料、逐步推理模型、写下思考过程
# 定义残差单元
def block(x, filters, strides=1, groups=32, conv_shortcut=True):if conv_shortcut:
shortcut = Conv2D(filters * 2, kernel_size=(1, 1), strides=strides, padding='same', use_bias=False)(x)
# epsilon为BN公式中防止分母为零的值
shortcut = BatchNormalization(epsilon=1.001e-5)(shortcut)
else:
# identity_shortcut
shortcut = x
# 三层卷积层
x = Conv2D(filters=filters, kernel_size=(1, 1), strides=1, padding='same', use_bias=False)(x)
x = BatchNormalization(epsilon=1.001e-5)(x)
x = ReLU()(x)
# 计算每组的通道数
g_channels = int(filters / groups)
# 进行分组卷积
x = grouped_convolution_block(x, strides, groups, g_channels)x = Conv2D(filters=filters * 2, kernel_size=(1, 1), strides=1, padding='same', use_bias=False)(x)
x = BatchNormalization(epsilon=1.001e-5)(x)
x = Add()([x, shortcut])
x = ReLU()(x)
return x# 堆叠残差单元
def stack(x, filters, blocks, strides, groups=32):
# 每个stack的第一个block的残差连接都需要使用1*1卷积升维
x = block(x, filters, strides=strides, groups=groups)
for i in range(blocks):
x = block(x, filters, groups=groups, conv_shortcut=False)
return x

问题:如果conv_shortcut=False,那么执行“x=Add()…”语句时,通道数不一致的,为什么不会报错?

思考分析

        在ResNext网络中,将conv_shortcut参数设置为False,表示使用identity_shortcut而不是Conv2D层作为快捷连接。

        对于定义残差单元block模块,Add()是x和shortcut相加,x通道数是filter*2。对于shortcut,conv_shortcut为True则是filters*2,否则是原始输入通道数。

        最后对于堆叠残差模块stack,第二次调用block时,conv_shortcut参数是False,使用的是identity_shortcut,这种情况下,快捷连接将直接传递输入x给块的最后一层。因此,在执行“x=Add()…”语句时,快捷连接的通道数与该层的通道数不一致。

        但是,由于Add()层在通道数不同时会自动对快捷连接进行零填充,所以不会出现尺寸不匹配的错误。此外,这种零填充不会对训练产生任何影响,因为填充的值不会接收任何梯度更新。

        总之,Add 层具有自动广播机制,可以在计算时自动扩展较小张量的形状以匹配较大张量的形状,因此即使通道数不一致也不会报错。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Kafka学习
  • PS怎么给图片打马赛克
  • 从 ArcMap 迁移到 ArcGIS Pro
  • linux创建定时任务
  • react启用mobx @decorators装饰器语法
  • nigix的下载使用
  • LeetCode K次取反后最大化的数组和(贪心算法)
  • 【深度学习基础】MAC pycharm 专业版安装与激活
  • 【银河麒麟服务器操作系统】系统夯死分析及处理建议
  • Java基础(十九):集合框架
  • 每天一个数据分析题(四百二十六)- 总体方差
  • 动态模型管理:Mojo模型的自定义保存与加载控制
  • hutool处理excel时候空指针小记
  • Windows下编译OpenSSL静态库
  • 华为机试题-单车道汽车通行时间-Java
  • .pyc 想到的一些问题
  • 【347天】每日项目总结系列085(2018.01.18)
  • Codepen 每日精选(2018-3-25)
  • JS实现简单的MVC模式开发小游戏
  • LintCode 31. partitionArray 数组划分
  • vuex 笔记整理
  • 初识 beanstalkd
  • 搭建gitbook 和 访问权限认证
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 提醒我喝水chrome插件开发指南
  • 微服务核心架构梳理
  • 一个完整Java Web项目背后的密码
  • 一些关于Rust在2019年的思考
  • 你对linux中grep命令知道多少?
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 2017年360最后一道编程题
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ### RabbitMQ五种工作模式:
  • (06)Hive——正则表达式
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (转)Windows2003安全设置/维护
  • ..回顾17,展望18
  • .form文件_一篇文章学会文件上传
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET下的多线程编程—1-线程机制概述
  • [ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题
  • [ 手记 ] 关于tomcat开机启动设置问题
  • []sim300 GPRS数据收发程序
  • [04]Web前端进阶—JS伪数组
  • [20150629]简单的加密连接.txt
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [C#]winform使用onnxruntime部署LYT-Net轻量级低光图像增强算法
  • [c]扫雷