本文根据个人理解写的,如有纰漏望指正,谢谢!
conv1d有两个,一个是torch.nn模块中,另一个是torch.nn.functional模块中。
调用格式
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)
则 A 1 , 1 A_{1,1} A1,1的计算为:
[ a 1 , 1 a 1 , 2 a 1 , 3 a 1 , 4 a 2 , 1 a 2 , 2 a 2 , 3 a 2 , 4 ] ∗ k e r n e l = A 1 , 1 \left[ \begin{array}{cc} a_{1,1} \quad a_{1,2} \quad a_{1,3} \quad a_{1,4} \\ a_{2,1} \quad a_{2,2} \quad a_{2,3} \quad a_{2,4} \end{array} \right] * kernel = A_{1,1} [a1,1a1,2a1,3a1,4a2,1a2,2a2,3a2,4]∗kernel=A1,1
其中 k e r n e l ∈ R 2 × 2 kernel \in R^{2 \times 2} kernel∈R2×2,也就是nn.Conv1(2,4, 2)中最后一个参数指定的大小,也就是一个2x2的矩阵,具体为什么只能设置长宽一致的核不太清楚。
需要强调的是:
(1)nn.Conv1(2,4, 2)第一个参数使之input_channels的维度大小,也就是要与原始数据(3,2,4)第二个维度对应。
(2)nn.Conv1(2,4, 2)第二个参数是输出维度的大小。
举个例子
conv1d参与操作的主要有:输入数据、weight、bias。参考
import torch.nn as nn
import torch
# input data
input = torch.randn(3, 2, 4) # (batch_size,channels,length)
print("input data:\n",input)
# define conv1d
m = nn.Conv1d(2, 4, 2, stride=1) # (input_channels, output_channels, kernel_size, stride)
# weight and bias
print("weight:\n",m.weight)
print("bias:\n", m.bias)
# perform conv1d
output = m(input)
print("output:\n",output)
注:如何更改weight和bias呢?
nn.init.constant_(conv1.weight, 1) # 将核的元素值初始化为全1
nn.init.constant_(conv1.bias, 0) # 偏置值为0
调用格式
torch.nn.functional.conv1d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)