Conv1d
nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
参数解读:
in_channels: 输入通道。在文本分类中,即为词向量的维度
out_channels: 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
kernel_size:卷积核的尺寸(k, in_channels)
stride: 卷积步长
padding: 输入的每一条边补充0的层数
dilation:卷积核元素之间的间距
groups:输入通道到输出通道的阻塞连接数
bias: 如果bias=True,添加偏置
用一个例子来解释Conv1d操作
conv1 = nn.Conv1d(in_channels=256, out_channels=100, kernel_size=3, stride=1, padding=0)
input = torch.randn(32, 35, 256) # [batch_size, max_len, embedding_dim]
input = input.permute(0, 2, 1) # 交换维度:[batch_size, embedding_dim, max_len]
out = conv1(input) # [batch_size, out_channels, n+2p-f/s+1]
print(out.shape) # torch.Size([32, 100, 33])
input的的维度是[batch_size, max_len, embedding_dim],在开始Conv1d前需要将max_len换到最后一个维度用来做一维卷积。卷积后的结果[batch_size, out_channels, n+2p-f/s+1],在纵向维度上(35 + 2*0 - 3)/1 + 1=33。
Conv2d
一般用于图像,给定一个4维的input和filter,计算一个二维卷积就是横向和纵向均卷积。
nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
参考博客:
https://blog.csdn.net/lyj223061/article/details/108709447
https://blog.csdn.net/sunny_xsc1994/article/details/82969867
https://blog.csdn.net/liujh845633242/article/details/102668515