dynamic k-max pooling 动态k-max 池化
最近老师让做一个比较多个池化操作的作业。其中包含了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 池化相关推荐
- Spatial Pyramid Pooling(空间金字塔池化)-变尺度CNN训练
1. 需求创造好的产品,产品拓宽原始的需求 当前的深度神经网络一般都需要固定的输入图像尺寸(如224*224). 这种需求很明显是人为的,潜在性的弊端会降低识别精度(为了使图像尺寸相同,一定会涉及到图 ...
- 卷积和池化matlab 实现,UFLDL新版教程与编程练习(七):Convolution and Pooling(卷积和池化)...
UFLDL是吴恩达团队编写的较早的一门深度学习入门,里面理论加上练习的节奏非常好,每次都想快点看完理论去动手编写练习,因为他帮你打好了整个代码框架,也有详细的注释,所以我们只要实现一点核心的代码编写工 ...
- mysql pooling 作用_关于池化(pooling)理解!!!
网上看到一个池化的解释是: 为了描述大的图像,可以对不同位置的特征进行聚合统计,如计算平均值或者是最大值,即mean-pooling和max-pooling 我的想法是,图像做卷积以后,将图像信息(特 ...
- 池化层(pooling layer) 感受野(Receptive Field) 神经网络的基本组成
目录 (1)本文涉及的函数 (2)池化层 (3)感受野 (4)代码示例(含注释) 承接上两篇博客:卷积层(空洞卷积对比普通卷积).激活函数层 (1)本文涉及的函数 import torch impor ...
- 深度学习笔记(25) 池化层
深度学习笔记(25) 池化层 1. max pooling 2. mean pooling 3. pooling 超参 1. max pooling 除了卷积层,卷积网络也经常使用池化层来缩减模型的大 ...
- 深度学习8.池化的概念
深度学习8.池化的概念 一.一些基本概念 1. 什么是池化 2. 池化的作用 3. 池化核大小 4. 步幅大小 5. 填充 二.最大池化 1. 最大池化运算示例 2. Python实现最大池化算法 三 ...
- 池化Pooling中的Max Pooling
目录 Max Pooling介绍 Max Pooling的作用 Max Pooling介绍 卷积神经网络CNN中,一般在卷积层后还会有一个 pooling层,即池化层,池化层做的实际是数据降维,简化计 ...
- 【CV】图像分类中的max pooling和average pooling区别
卷积神经网络中,经常采用池化操作,一般都会在卷积层后面接一个池化操作.近些年,比较主流的ImageNet的分类算法模型都是使用max pooling,很少使用average Pooling,这对我们平 ...
- 双线性池化(Bilinear Pooling)详解、改进及应用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|深度学习这件小事 最近看了一系列bilinear pool ...
- 卷积神经网络中的池化方法(pooling)总结
在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合). 为什么可以通过降低维度呢? 因为图像具有一种"静态性 ...
最新文章
- 教你辨别36k纯数据科学家
- 武汉大学计算机学院 毕业答辩,“云答辩”详细流程出炉! 武大本科生毕业答辩这样办...
- android开发环境搭建教程
- python监听鼠标事件_Python中使用PyHook监听鼠标和键盘事件实例
- 开发板的I/O在哪里——韦东山嵌入式Linux视频学习笔记01
- 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(上)
- 2021暑假实习-SSM超市积分管理系统-day09笔记
- 多个常见代码设计缺陷
- C++学习之路 | PTA乙级—— 1043 输出PATest (20 分)(精简)
- 宁波晚报php怎么样,宁波晚报编辑部收到一封意外来信,“今天,最美的头条是你们”...
- c++ 状态模式(state)
- SHELL脚本项目实例(一)
- 利用BP神经网络 设计一个三层神经网络解决手写数字的识别问题
- pop3邮箱服务器地址,常用邮箱服务器(smtp,pop3)地址,端口(示例代码)
- pdf怎么编辑修改内容?以下方法你都知道吗
- matlab 图像上加边框,matlab代码-图像上画框 | 学步园
- linux qt lgl,Linux下QT、cannot find -lGL、
- 2020年冬小麦越冬期长势监测卫星遥感影像解读
- ad域时间源配置_Windows Server 2008 R2 域控制器的时间同步配置
- GNSS星历数据读取