最近老师让做一个比较多个池化操作的作业。其中包含了max,min,avg,k-max, dynamic k-max。
前面四种还好说,max和avg在pytorch.nn.functional里面就有,min只需要给输入值加个负号,然后在外面加个负号会正即可。k-max也是网上有很多的实现方式。但是关于dynamic k-max的资料在百度里面实在太少。谷歌里面也都是一些tf,或者别的实现方式的,而我要的是pytorch的。
好吧!其实pytorch的我也在github里面找到了,只是当时我已经用我自己的方式实现了,所以也就没有用他的那种方法。
先还是讲一下dynamic k-max 具体是怎么回事吧!
首先dynamic k-max 出现在这篇论文里面:A Convolutional Neural Network for Modelling Sentences

论文里是这样讲的:

动态k-max池化操作是在k-max池化操作的基础上以k为句子长度和网络深度的池化操作。 尽管可以使用许多功能,但我们仅按如下所示对池参数建模:

其中l是当前应用池化的卷积层的数量,L是网络中卷积层的总数; ktop是最顶层卷积层的固定池参数(第3.2节)。 例如,在具有三个卷积层且ktop = 3的网络中,对于长度为s = 18的输入语句,第一层的合并参数为k1 = 12,第二层的合并参数为k2 = 6; 第三层具有固定的合并参数k3 = ktop =3。公式4是描述长度为s的句子中l阶特征的相关部分所需的值数量的模型。 例如,在情感预测中,根据等式,在长度为s的句子中,一阶特征(如肯定词)最多出现k1次,而二阶特征(如否定短语或从句)最多出现k2次。

我英语差,机翻的别介意。
其实里面最重要的就是(4)公式。
我现在将我实现的代码贴出来,

   #x是输入,numoflayers是L,numlayer是l,k_top就不用说了,就是k-max的kdef dynamic_kmax_pooling(self,x,numoflayers,numlayer,dim,k_top):tmepnum=int(((numoflayers - numlayer) * x.size()[dim]) / numoflayers) + 1#向上取整,x.size()[dim]是输入向量中max_len,也就是sk=(tmepnum if tmepnum>k_top else k_top)#max操作index = x.topk(k, dim=dim)[1].sort(dim=dim)[0]return x.gather(dim, index)

你可以结合着上面的公式看,这段代码你会发现挺好理解的。完完本本的上面的那个公式好吧。

你看到你就以为结束了吗?
不,你错了。
还有一个点,非常的重要,那就是你没有发现吗?这样输出的向量是不固定的,也就是这样输出的向量的维数会随着k的变化而变化。因此也就不能使用全连接层去直接分类。
至少都需要在中间再加入一个卷积层,将经过的卷积层通过k-max转换为固定长度的向量,然后通过全连接层区分类。

            #经过动态k-最大池化层,维度变为(batch_size, out_chanel, w=k, h=1)x = [self.dynamic_kmax_pooling(x_item,numoflayers=2,numlayer=1,dim=2, k_top=self.args.k) for x_item in x]x = [F.relu(conv(x_item)) for x_item in x for conv in self.conv2]#因为filter_sizes有3层,所以每增加一次卷积维数都会增加3# 经过动态k-最大池化层,维度变为(batch_size, out_chanel, w=self.args.k, h=1)x = [self.kmax_pooling(x_item, 2, self.args.k) for x_item in x]# 将不同卷积核运算结果维度(batch,out_chanel,w,h=1)展平为(batch, outchanel*w*h)x = [x_item.view(x_item.size(0), -1) for x_item in x]# 将不同卷积核提取的特征组合起来,维度变为(batch, sum:outchanel*w*h)x = torch.cat(x, 1)# dropout层x = self.dropout(x)# 全连接层logits = self.linear(x)

这样卷积层的总层数至少也得是2,经过dynamic k-max的层数也至少要比总层数少1,可以避免出现就是L-l==0的情况。

不知道,你现在懂了吗?没懂,我也没办法?自己查资料去!

dynamic k-max pooling 动态k-max 池化相关推荐

  1. Spatial Pyramid Pooling(空间金字塔池化)-变尺度CNN训练

    1. 需求创造好的产品,产品拓宽原始的需求 当前的深度神经网络一般都需要固定的输入图像尺寸(如224*224). 这种需求很明显是人为的,潜在性的弊端会降低识别精度(为了使图像尺寸相同,一定会涉及到图 ...

  2. 卷积和池化matlab 实现,UFLDL新版教程与编程练习(七):Convolution and Pooling(卷积和池化)...

    UFLDL是吴恩达团队编写的较早的一门深度学习入门,里面理论加上练习的节奏非常好,每次都想快点看完理论去动手编写练习,因为他帮你打好了整个代码框架,也有详细的注释,所以我们只要实现一点核心的代码编写工 ...

  3. mysql pooling 作用_关于池化(pooling)理解!!!

    网上看到一个池化的解释是: 为了描述大的图像,可以对不同位置的特征进行聚合统计,如计算平均值或者是最大值,即mean-pooling和max-pooling 我的想法是,图像做卷积以后,将图像信息(特 ...

  4. 池化层(pooling layer) 感受野(Receptive Field) 神经网络的基本组成

    目录 (1)本文涉及的函数 (2)池化层 (3)感受野 (4)代码示例(含注释) 承接上两篇博客:卷积层(空洞卷积对比普通卷积).激活函数层 (1)本文涉及的函数 import torch impor ...

  5. 深度学习笔记(25) 池化层

    深度学习笔记(25) 池化层 1. max pooling 2. mean pooling 3. pooling 超参 1. max pooling 除了卷积层,卷积网络也经常使用池化层来缩减模型的大 ...

  6. 深度学习8.池化的概念

    深度学习8.池化的概念 一.一些基本概念 1. 什么是池化 2. 池化的作用 3. 池化核大小 4. 步幅大小 5. 填充 二.最大池化 1. 最大池化运算示例 2. Python实现最大池化算法 三 ...

  7. 池化Pooling中的Max Pooling

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

  8. 【CV】图像分类中的max pooling和average pooling区别

    卷积神经网络中,经常采用池化操作,一般都会在卷积层后面接一个池化操作.近些年,比较主流的ImageNet的分类算法模型都是使用max pooling,很少使用average Pooling,这对我们平 ...

  9. 双线性池化(Bilinear Pooling)详解、改进及应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|深度学习这件小事 最近看了一系列bilinear pool ...

  10. 卷积神经网络中的池化方法(pooling)总结

    在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合). 为什么可以通过降低维度呢? 因为图像具有一种"静态性 ...

最新文章

  1. 教你辨别36k纯数据科学家
  2. 武汉大学计算机学院 毕业答辩,“云答辩”详细流程出炉! 武大本科生毕业答辩这样办...
  3. android开发环境搭建教程
  4. python监听鼠标事件_Python中使用PyHook监听鼠标和键盘事件实例
  5. 开发板的I/O在哪里——韦东山嵌入式Linux视频学习笔记01
  6. 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(上)
  7. 2021暑假实习-SSM超市积分管理系统-day09笔记
  8. 多个常见代码设计缺陷
  9. C++学习之路 | PTA乙级—— 1043 输出PATest (20 分)(精简)
  10. 宁波晚报php怎么样,宁波晚报编辑部收到一封意外来信,“今天,最美的头条是你们”...
  11. c++ 状态模式(state)
  12. SHELL脚本项目实例(一)
  13. 利用BP神经网络 设计一个三层神经网络解决手写数字的识别问题
  14. pop3邮箱服务器地址,常用邮箱服务器(smtp,pop3)地址,端口(示例代码)
  15. pdf怎么编辑修改内容?以下方法你都知道吗
  16. matlab 图像上加边框,matlab代码-图像上画框 | 学步园
  17. linux qt lgl,Linux下QT、cannot find -lGL、
  18. 2020年冬小麦越冬期长势监测卫星遥感影像解读
  19. ad域时间源配置_Windows Server 2008 R2 域控制器的时间同步配置
  20. GNSS星历数据读取

热门文章

  1. 以逗号分割数组并且去除数组最后得空数据
  2. Python网络流量监视程序设计与实现
  3. mindmanager2020版下载激活码序列号密钥版及使用教程
  4. win10系统魔兽世界无法连接服务器地址,win10系统魔兽世界无法启动3d加速怎么解决...
  5. 社群编码识别黑灰产攻击实践
  6. Hadoop HA_Yarn HA 集群的搭建
  7. 贴片晶振的脚位方向如何区分
  8. c++17之结构化绑定
  9. 2、服务器系统:Windows Server 2012 操作系统
  10. 初等数学复习之一元二次方程的解法