神经网络中,一个小的trick有可能让网络performance变得非常好。对于神经网络的理解,我们不应该停留在对于pytorch、tf等的依赖上,他们经常性的考虑到了我们可能出错的地方,并进行了修正,这样反而对我们调试网络,带来了一定的hidden problem。

对于pytorch等开源框架,很多不可导的函数、表达式都可以被写入模型的forward里,比较常见的是maxpooling 和 Relu。所以先举例这两个。

1.max pooling

源码中有一个max_idx_的变量,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如上图所示。同理 mean pooling

这里还要注意的是,x.min,x.max这类值(网络中间层:x)虽然也可以计算梯度,但是对于整张feature map,相当于只有一个点进行了梯度的回传,网络不可能收敛,所以网络千万不要使用这些参数进行约束

2.Relu

relu在x =0的地方没有导数,但是一般框架把这个点的导数用if -else类型语句写出来了,是0或者1(取决于框架)

3. round,ceil

对于这样子的取整函数,事实上也是不可导的,但是框架会将阶跃函数近似为线性函数,可以去参考2值和3值神经网络的论文,大概意思就是把一个台阶近似为一个滑梯。

4.回归初心

其实有个公式是“万能求导公式”:f′(x)=limΔx0[f(x+Δx)−f(x)]/Δxf′(x)=limΔx0[f(x+Δx)−f(x)]/Δx

我没有验证,我只是猜测,很多不可导的点,可能他都是经过这个计算出来的“导数”,因为不管什么函数只要有值(阶跃函数等等),都可以出来一个导数,只是准确性的问题。

reference:

https://blog.csdn.net/qq_21190081/article/details/72871704

https://www.imooc.com/article/details/id/31069

CNN max pooling、Relu、round 等环节梯度如何反传?相关推荐

  1. torch编程-加载预训练权重-模型冻结-解耦-梯度不反传

    1)加载预训练权重 net = torchvision.models.resnet50(pretrained=False) # 构建模型 pretrained_model = torch.load(p ...

  2. 自然语言处理中CNN模型几种常见的Max Pooling操作

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 (想更系统地学习深度学习知识?请参考:深度学习枕边书) CNN是目前自然语言处理中和RNN并驾齐驱的两 ...

  3. 对Max Pooling的理解

    Max Pooling是什么 在卷积后还会有一个 pooling 的操作. max pooling 的操作如下图所示:整个图片被不重叠的分割成若干个同样大小的小块(pooling size).每个小块 ...

  4. Global Average Pooling与FC、Global Max Pooling的比较

    原文 Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术.在keras发布的经典模型中,可以看到不少模 ...

  5. 深度学习:使用卷积网络实现计算机图像识别,卷积和max pooling操作介绍

    深度学习在计算机图像识别上的应用非常成功.利用深度学习,我们能够对图片进行高精度识别,实现这一功能的,主要依靠神经网络中的一种分支,名为卷积网络.卷积网络与我们前面实现的网络不通之处在于,它可以直接接 ...

  6. CNN中pooling层的作用

    1.pooling是在卷积网络(CNN)中一般在卷积层(conv)之后使用的特征提取层,使用pooling技术将卷积层后得到的小邻域内的特征点整合得到新的特征.一方面防止无用参数增加时间复杂度,一方面 ...

  7. max pooling

    max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似 tf.nn.max_pool(value, ksize, strides, padding, name=None)参数是四个, ...

  8. 池化Pooling中的Max Pooling

    目录 Max Pooling介绍 Max Pooling的作用 Max Pooling介绍 卷积神经网络CNN中,一般在卷积层后还会有一个 pooling层,即池化层,池化层做的实际是数据降维,简化计 ...

  9. CNNs中,什么是max pooling, 为什么需要max pooling

    max pooling是发生在卷积层与池化层的一种图片压缩方法. 而卷积层和池化层是CNNs中最重要的两部分,因为有卷积层, 所以叫做卷积神经网络. 假设一张2d, 一层的图片, 大小为4 * 4, ...

最新文章

  1. Keras【Deep Learning With Python】机器学习和线性回归
  2. python 冷门_csvkit---python一个牛逼到不行的csv处理库
  3. 速看,三分钟带你了解IP协议!
  4. Qt QWidget实现手势缩放和平移(一)
  5. 去除Activity的标题栏以及全屏显示
  6. java反射基本使用,反射泛型参数类型获取
  7. 华为harmonyOS开发者日,华为首届HarmonyOS开发者创新大赛收官
  8. lightoj1213推公式
  9. 图书在线网店的html,网上书城html模板.docx
  10. matlab流体力学分析,matlab流体力学
  11. 340-写一个银行转账死锁问题并且解决
  12. 幼儿园数学目标_大班数学领域目标
  13. Java中的getBytes()方法详解
  14. 盘点:近一年全球十大数据安全事件
  15. 软件开源许可协议简介
  16. 360与QQ大战,网友昨晚热论看大片
  17. Linux和Windows双系统gpt,Windows+Ubuntu双系统GPTMBR引导设置
  18. 统计字符出现的次数(输出由多到少)
  19. Debug的心路历程
  20. 关于赛车游戏的一点体会

热门文章

  1. Android连接网络
  2. java批量去除pdf签名,删除签名图标
  3. Qt Quick编程——QML的核心部分ECMAScript
  4. 实战:windows上如何安装kubectl并连接我们的k8s集群(测试成功-博客输出)-2022.1.3
  5. 不止一面的百变 ACE
  6. python脚本无缝拼接图片
  7. 08-Hibernate3.6.2 查询02 by SQL QBC QBE
  8. 足球赛积分管理系统c语言,足球赛计时计分器课程设计报告.doc
  9. 怎么用java添加电影,如何使用qtj和java从一组图像创建电影?
  10. Flash, Flex, Air, Flashplayer之间的相互关系是什么