原文链接1:https://blog.csdn.net/liujh845633242/article/details/102668515
原文链接2:https://www.jianshu.com/p/a6da4ad8e8e7
class torch.nn.Conv1d(
in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
dilation=1,
groups=1,
bias=True)
input = torch.randn(50, 300, 35)
conv1 = nn.Conv1d(in_channels=300, out_channels=100, kernel_size=3)
# batch_size x max_sent_len x embedding_size -> batch_size x embedding_size x max_sent_len
print("input:", input.size()) # 50*300*35
output = conv1(input)
print("output:", output.size()) # 50*100*33 因为35-3+1=33
注意卷积中的参数padding_mode:
padding_mode的可选项有4种:‘zero’、‘reflect’、‘replicate’、‘circular’,默认为零填充’zero’
# Input
tensor([[[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.],
[13., 14., 15., 16.]]]], requires_grad=True)
# 若padding_mode='circular' 即循环填充
conv_reflect = torch.nn.Conv2d(1,1,1,1,padding=1,padding_mode='circular',bias=False)
# Output
tensor([[[[16., 13., 14., 15., 16., 13.],
[ 4., 1., 2., 3., 4., 1.],
[ 8., 5., 6., 7., 8., 5.],
[12., 9., 10., 11., 12., 9.],
[16., 13., 14., 15., 16., 13.],
[ 4., 1., 2., 3., 4., 1.]]]], grad_fn=<ThnnConv2DBackward>)
输出的结果的来源:
假设将输入矩阵从左到右,从上到下进行无限的重复循环延申,就是如下结果:
然后选取其中的padding=1的部分即为最终结果。