Pytorch Conv1d()
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
ortuple
) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels - stride(
int
ortuple
,optional
) - 卷积步长 - padding (
int
ortuple
,optional
)- 输入的每一条边补充0的层数 - dilation(
int
ortuple
, `optional``) – 卷积核元素之间的间距 - groups(
int
,optional
) – 从输入通道到输出通道的阻塞连接数 - bias(
bool
,optional
) - 如果bias=True
,添加偏置
二:怎么去理解这些参数
例如我们输入的矩阵是:(N * in_channels * Lin),这里N是批次大小,in_channels是我们向量的行,Lin是我们向量的列
官方文档说我们最后输出是(N,out_channels,Lout)
具体是怎么做的呢?
in_channels(int
) – 输入信号的通道。在文本分类中,即为词向量的维度,也可以理解是输入数据的行
out_channels(int
) – 卷积产生的通道。相当于我们希望输出的行。一个卷积核对应一组输出,N个卷积核对应N组输出。而卷积核的数量不用我们给出,我们只要给出kernel_size就行
kernel_size(int
or tuple
) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels
我们输出的矩阵是(N,out_channels,Lout)
而Lout = (Lin - kernel_size + 1) / stride
例如:
conv1 = nn.Conv1d(in_channels=256,out_channels=100,kernel_size=2) input = torch.randn(32,256,35) out = conv1(input) print(out.size()) #输出结果为:(32,100,34)