nn.Conv1d理解

REF

  1. https://blog.csdn.net/sunny_xsc1994/article/details/82969867
  2. https://zhuanlan.zhihu.com/p/29201491

一张图

conv1d.jpeg

解释:
所谓一维卷积,就是卷积时只看纵列(即句子方向,图中d=5为词向量维度)。初始:输入7乘5 。卷积核:三种大小,分别为2x5、3x5、4x5,每种两个。重点是卷积时,只在纵列一个方向上滑动。这里stride为1,所以输出n+2p-f)/s+1,padding为0。[2x5]的数据与[2x5]的卷积核每个元素相乘后相加,结果为一个元素。所以输出分别是6x1,5x1,4x1。经过一个卷积核大小为4的max_pooling,变成1个值。最后获得6个值,进行拼接,在经过一个全连接层,输出2个类别的概率。

Conv1d

class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
-in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度
-out_channels(int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
-kernel_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels
-stride(int or tuple, optional) - 卷积步长
-padding (int or tuple, optional)- 输入的每一条边补充0的层数
-dilation(int or tuple, `optional``) – 卷积核元素之间的间距
-groups(int, optional) – 从输入通道到输出通道的阻塞连接数
-bias(bool, optional) - 如果bias=True,添加偏置

例子

conv1 = nn.Conv1d(in_channels=256,out_channels=100,kernel_size=2)
input = torch.randn(32,35,256)
# batch_size x text_len x embedding_size -> batch_size x embedding_size x text_len
input = input.permute(0,2,1)
out = conv1(input)
print(out.size())

这里32为batch_size,35为句子最大长度,256为词向量。输入一维卷积的时候,需要将32x35x256变换为32x256x35,因为一维卷积是在最后维度上扫的,最后out的大小即为:32x100x(35-2+1)=32x100x34

你可能感兴趣的:(nn.Conv1d理解)