捷徑

Conv3d

class torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)[source][source]

對由多個輸入平面組成的輸入訊號應用 3D 卷積。

在最簡單的情況下,輸入大小為 (N,Cin,D,H,W)(N, C_{in}, D, H, W) 且輸出為 (N,Cout,Dout,Hout,Wout)(N, C_{out}, D_{out}, H_{out}, W_{out}) 的層的輸出值可以精確地描述為

out(Ni,Coutj)=bias(Coutj)+k=0Cin1weight(Coutj,k)input(Ni,k)out(N_i, C_{out_j}) = bias(C_{out_j}) + \sum_{k = 0}^{C_{in} - 1} weight(C_{out_j}, k) \star input(N_i, k)

其中 \star 是有效的 3D 互相關 (cross-correlation) 運算子

此模組支援 TensorFloat32

在某些 ROCm 裝置上,當使用 float16 輸入時,此模組將對 backward 使用不同的精確度

  • stride 控制互相關 (cross-correlation) 的步幅。

  • padding 控制應用於輸入的填充量。 它可以是字串 {'valid', 'same'} 或整數的元組,提供應用於兩側的隱式填充量。

  • dilation 控制核心點之間的間距;也稱為 à trous 演算法。 雖然很難描述,但這個 連結 有對 dilation 的作用進行很好的視覺化呈現。

  • groups 控制輸入和輸出之間的連接。 in_channelsout_channels 都必須能被 groups 整除。 例如,

    • 當 groups=1 時,所有輸入都會卷積到所有輸出。

    • 當 groups=2 時,此操作相當於並排有兩個卷積層,每個層看到一半的輸入通道並產生一半的輸出通道,然後將兩者串聯。

    • 當 groups= in_channels 時,每個輸入通道都使用自己的一組濾波器進行卷積(大小為 out_channelsin_channels\frac{\text{out\_channels}}{\text{in\_channels}})。

參數 kernel_sizestridepaddingdilation 可以是

  • 單個 int – 在這種情況下,相同的值用於深度、高度和寬度維度

  • 三個 inttuple – 在這種情況下,第一個 int 用於深度維度,第二個 int 用於高度維度,第三個 int 用於寬度維度

注意

groups == in_channelsout_channels == K * in_channels 時,其中 K 是一個正整數,此操作也稱為“深度卷積”。

換句話說,對於大小為 (N,Cin,Lin)(N, C_{in}, L_{in}) 的輸入,可以使用參數 (Cin=Cin,Cout=Cin×K,...,groups=Cin)(C_\text{in}=C_\text{in}, C_\text{out}=C_\text{in} \times \text{K}, ..., \text{groups}=C_\text{in}) 執行深度可分離卷積,其中深度乘數為 K

注意

在某些情況下,當在 CUDA 裝置上給定張量並使用 CuDNN 時,此運算符可能會選擇一種非確定性演算法來提高效能。 如果不希望這樣,您可以嘗試設定 torch.backends.cudnn.deterministic = True 來使操作具有確定性(可能會降低效能)。 有關更多資訊,請參閱重現性

注意

padding='valid' 與不填充相同。 padding='same' 填充輸入,使輸出具有與輸入相同的形狀。 但是,此模式不支援 1 以外的任何 stride 值。

注意

此模組支援複數資料類型,即 complex32, complex64, complex128

參數
  • in_channels (int) – 輸入影像中的通道數

  • out_channels (int) – 卷積產生的通道數

  • kernel_size (inttuple) – 卷積核心的大小

  • stride (inttuple, optional) – 卷積的步幅。 預設值:1

  • padding (int, tuplestr, optional) – 增加到輸入的所有六個面的填充。 預設值:0

  • dilation (inttuple, optional) – 核心元素之間的間距。 預設值:1

  • groups (int, optional) – 從輸入通道到輸出通道的阻塞連接數。 預設值:1

  • bias (bool, optional) – 如果 True,則向輸出新增可學習的偏差。 預設值:True

  • padding_mode (str, optional) – 'zeros''reflect''replicate''circular'。 預設值:'zeros'

形狀
  • 輸入:(N,Cin,Din,Hin,Win)(N, C_{in}, D_{in}, H_{in}, W_{in})(Cin,Din,Hin,Win)(C_{in}, D_{in}, H_{in}, W_{in})

  • 輸出:(N,Cout,Dout,Hout,Wout)(N, C_{out}, D_{out}, H_{out}, W_{out})(Cout,Dout,Hout,Wout)(C_{out}, D_{out}, H_{out}, W_{out}),其中

    Dout=Din+2×填充[0]膨脹[0]×(核心大小[0]1)1步幅[0]+1D_{out} = \left\lfloor\frac{D_{in} + 2 \times \text{padding}[0] - \text{dilation}[0] \times (\text{kernel\_size}[0] - 1) - 1}{\text{stride}[0]} + 1\right\rfloor
    Hout=Hin+2×填充[1]膨脹[1]×(核心大小[1]1)1步幅[1]+1
    變數
    • weight ( Tensor ) – 模組的可學習權重,形狀為 (out_channels,in_channelsgroups,(\text{out\_channels}, \frac{\text{in\_channels}}{\text{groups}}, kernel_size[0],kernel_size[1],kernel_size[2])\text{kernel\_size[0]}, \text{kernel\_size[1]}, \text{kernel\_size[2]})。 這些權重的值是從 U(k,k)\mathcal{U}(-\sqrt{k}, \sqrt{k}) 中抽樣而得,其中 k=groupsCini=02kernel_size[i]k = \frac{groups}{C_\text{in} * \prod_{i=0}^{2}\text{kernel\_size}[i]}

    • bias (Tensor) – 模組的可學習偏差值,形狀為 (out_channels)。如果 biasTrue,則這些權重的值會從 U(k,k)\mathcal{U}(-\sqrt{k}, \sqrt{k}) 抽樣而來,其中 k=groupsCini=02kernel_size[i]k = \frac{groups}{C_\text{in} * \prod_{i=0}^{2}\text{kernel\_size}[i]}

    範例

    >>> # With square kernels and equal stride
    >>> m = nn.Conv3d(16, 33, 3, stride=2)
    >>> # non-square kernels and unequal stride and with padding
    >>> m = nn.Conv3d(16, 33, (3, 5, 2), stride=(2, 1, 1), padding=(4, 2, 0))
    >>> input = torch.randn(20, 16, 10, 50, 100)
    >>> output = m(input)
    

    文件

    取得 PyTorch 的完整開發人員文件

    檢視文件

    教學

    取得初學者和進階開發人員的深入教學

    檢視教學

    資源

    尋找開發資源並獲得您的問題解答

    檢視資源