對由多個輸入平面組成的輸入訊號進行1D卷積操作。
在最簡單的情況下,輸入大小為 (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 控制核點之間的間距;也稱為空洞卷積演算法。這個概念比較難描述,但 這個連結 有一個 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 convolution)可以實現,其中 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) 均勻分佈中取樣得到,其中
bias (Tensor) – 模組的可學習偏置,形狀為 (out_channels)。如果 bias 為 True,則這些權值是從 U(−k,k) 均勻分佈中取樣得到,其中
示例
>>> m = nn.Conv1d(16, 33, 3, stride=2)
>>> input = torch.randn(20, 16, 50)
>>> output = m(input)