Conv1d
参数解释
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
- in_channels: 输入词向量的维度
- out_channels: 输出词向量的维度
- kernel_size: 卷积核大小
- stride: 步长
- padding: 是否进行填充,这里在词的两边分别填充padding的大小
- groups: 这个就是分组卷积的意思,和二维卷积的一样
实例演示
talk is cheap, show me your code
1. 第一个例子
下面直接看一组例子来理解,二维卷积一般用在图像中,一维卷积更多的用在NLP领域,也就是词向量中
1 | x = torch.randn(1, 8, 6) |
假设我们的词的个数为6,向量维度为8,即一句话一共有6个词,每个词被编码为8维度的向量。我们的1d卷积第一个参数为输入词向量的维度,即8;第二个为输出维度为16,即一共有16个卷积核;第三个参数为卷积核的大小为3,卷积核有两个维度,第二个维度由词向量维度来决定,因为词向量维度为8,所以卷积核大小为;第四个参数为padding,如下图,这里padding为2,则向词的两边分别填充2
2. 第二个例子
下面看一下group参数的作用
1 | x = torch.randn(1, 8, 6) |
这里我们仅仅加入一个groups=2,所得结果与上述结果相同,由之前的二维卷积可以分析出,group=2参数表明不对所有维度同时进行卷积,即这里的卷积核不是,而是将维度分为两份,这样卷积核的大小就是
,相当于卷积核变小了。如下图所示,本来卷积得到的结果需要对所有维度进行操作,这里分成了两份,相当于把词向量的维度首先分成了两份,然后对两份分别操作,这样的好处可以节省参数,即一共需要
个参数,这里的第一个2表示分为两份,后面的8,3,4分别表示8个卷积核,每个卷积核的大小为
,而例一中需要
个参数,是之前的两倍