最近老师让做一个比较多个池化操作的作业。其中包含了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)公式。
我现在将我实现的代码贴出来

本文深入探讨了动态k-max池化技术,一种基于k-max池化的变种,广泛应用于卷积神经网络中对句子进行建模。文章详细解析了其在不同卷积层上的动态调整机制,并提供了一段清晰的PyTorch实现代码,同时强调了在实际应用中如何避免向量维度随k变化的问题。
最低0.47元/天 解锁文章
8520

被折叠的 条评论
为什么被折叠?



