CNN与句子分类之动态池化方法DCNN--模型介绍篇

本文详细介绍了基于CNN的句子分类模型——动态卷积神经网络(DCNN),重点关注动态k-max pooling层。该模型通过per-dim卷积层、folding层和k-max pooling层捕捉句子中词语之间的长距离依赖,其中k-max pooling能动态选取不同层的最大k个值,保留位置信息。此外,folding层通过相邻维度求和降低了模型复杂度。
摘要由CSDN通过智能技术生成

本文是针对“A Convolutional Neural Network for Modelling Sentences”论文的阅读笔记和代码实现。这片论文的主要贡献在于其提出了一种动态pooling的方法。传统卷积神经网络中所用到的pooling方法一般是max-pooling,且pooling的size是固定不变的。本文通过k-max-pooling的方法可以在高层获取句子中位置较远的词语之间的联系。其整体思路如下图所示:
这里写图片描述
下面我们介绍一下论文所提出的模型,模型主要包含了per-dim的卷积层、folding层和k-max的pooling层。per-dim卷积层和前面一篇博客中介绍的是一样的,针对embed_size的每个维度分别进行卷积。folding层就是简单的将相邻的两个dim的值进行求和,从而实现维度的降低。k-max pooling层是选出最大的k个值而不是向传统的pooling层那样仅选出最大值。其模型架构如下图所示:
这里写图片描述

卷积层

这里使用的是per-dim卷积核,其作用如上图中的红色方

PyTorch中的动态池化操作是通过使用Adaptive Pooling函数来实现的。动态池化操作允许我们根据给定的输出大小自适应地调整输入的大小。 Adaptive Pooling函数可以自动计算池化操作的步长和池化窗口大小,以适应输出张量的尺寸要求。它非常适用于那些需要根据不同的输入大小进行池化操作的场景。 在PyTorch中,我们可以使用nn.AdaptiveMaxPool2d和nn.AdaptiveAvgPool2d函数来实现动态池化操作。 例如,假设我们有一个输入尺寸为[batch_size, channels, height, width]的张量,我们想要使用动态池化操作将其调整为特定的输出大小[batch_size, channels, output_height, output_width]。我们可以像以下代码一样实现动态池化操作: ```python import torch import torch.nn as nn input = torch.randn(batch_size, channels, height, width) adaptive_pool = nn.AdaptiveMaxPool2d((output_height, output_width)) output = adaptive_pool(input) ``` 在上述代码中,我们首先创建了一个AdaptiveMaxPool2d对象,它的参数是一个元组,表示要调整的输出大小。然后,我们将输入张量传递给AdaptiveMaxPool2d对象,它会根据输出大小自动计算池化操作的参数,并返回调整后的输出张量。 同样,我们可以使用nn.AdaptiveAvgPool2d函数来实现动态平均池化操作,它的用法与nn.AdaptiveMaxPool2d类似。 动态池化操作在许多深度学习任务中非常有用,特别是当输入图像的大小不一致时。通过使用PyTorch中的动态池化操作,我们可以更灵活地处理不同输入大小的数据,并实现更加强大和准确的深度学习模型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值