對由多個輸入平面組成的輸入訊號應用一維卷積。
在最簡單的情況下,輸入大小為 (N,Cin,L) 和輸出 (N,Cout,Lout) 的層的輸出值可以精確地描述為
out(Ni,Coutj)=bias(Coutj)+k=0∑Cin−1weight(Coutj,k)⋆input(Ni,k) 其中 ⋆ 是有效的 互相關 運算子,N 是批處理大小,C 表示通道數,L 是訊號序列的長度。
該模組支援 TensorFloat32。
在某些 ROCm 裝置上,當使用 float16 輸入時,此模組在反向傳播時將使用 不同的精度。
stride 控制互相關的步長,可以是一個單一數字或一個單元素元組。
padding 控制應用於輸入的填充量。它可以是一個字串 {‘valid’, ‘same’},或者一個整數元組,表示在兩側應用的隱式填充量。
dilation 控制卷積核點之間的間距;也稱為空洞演算法(à trous algorithm)。這難以描述,但這個 連結 很好地展示了 dilation 的作用。
groups 控制輸入和輸出之間的連線關係。in_channels 和 out_channels 都必須能被 groups 整除。例如,
當 groups=1 時,所有輸入都與所有輸出進行卷積。
當 groups=2 時,該操作相當於有兩個並排的卷積層,每個卷積層處理一半的輸入通道併產生一半的輸出通道,然後將兩者拼接起來。
當 groups= in_channels 時,每個輸入通道都與自己的一組濾波器(大小為 in_channelsout_channels)進行卷積。
注意
當 groups == in_channels 且 out_channels == K * in_channels 時(其中 K 為正整數),此操作也稱為“深度可分離卷積”。
換句話說,對於大小為 (N,Cin,Lin) 的輸入,可以使用引數 (Cin=Cin,Cout=Cin×K,...,groups=Cin) 執行深度可分離卷積,其中深度可分離乘數(depthwise multiplier)為 K。
注意
在某些情況下,當在 CUDA 裝置上給定張量並使用 CuDNN 時,此運算子可能會選擇非確定性演算法來提高效能。如果不需要此行為,您可以嘗試透過設定 torch.backends.cudnn.deterministic = True 使操作具有確定性(可能會付出效能代價)。有關更多資訊,請參閱可復現性。
注意
padding='valid' 等同於無填充。padding='same' 會對輸入進行填充,使輸出形狀與輸入形狀相同。但是,此模式不支援除 1 之外的任何步長值。
注意
此模組支援複數資料型別,例如 complex32, complex64, complex128。
- 引數
in_channels (int) – 輸入影像中的通道數
out_channels (int) – 卷積產生的通道數
kernel_size (int 或 tuple) – 卷積核的大小
stride (int 或 tuple, 可選) – 卷積步長。預設值:1
padding (int, tuple 或 str, 可選) – 新增到輸入兩側的填充量。預設值:0
dilation (int 或 tuple, 可選) – 卷積核元素之間的間距。預設值:1
groups (int, 可選) – 從輸入通道到輸出通道的阻塞連線數。預設值:1
bias (bool, 可選) – 如果為 True,則向輸出新增一個可學習的偏置項。預設值:True
padding_mode (str, 可選) – 'zeros', 'reflect', 'replicate' 或 'circular'。預設值:'zeros'
- 形狀
輸入: (N,Cin,Lin) 或 (Cin,Lin)
輸出: (N,Cout,Lout) 或 (Cout,Lout),其中
Lout=⌊strideLin+2×padding−dilation×(kernel_size−1)−1+1⌋
- 變數
weight (Tensor) – 模組的可學習權重,形狀為 (out_channels,groupsin_channels,kernel_size)。這些權重的值從 U(−k,k) 中取樣得到,其中 k=Cin∗kernel_sizegroups
bias (Tensor) – 模組的可學習偏置,形狀為 (out_channels)。如果 bias 為 True,則這些偏置的值從 U(−k,k) 中取樣得到,其中 k=Cin∗kernel_sizegroups
示例
>>> m = nn.Conv1d(16, 33, 3, stride=2)
>>> input = torch.randn(20, 16, 50)
>>> output = m(input)