快捷方式

Conv3dNet

class torchrl.modules.Conv3dNet(in_features: int | None = None, depth: int | None = None, num_cells: Sequence[int] | int = None, kernel_sizes: Sequence[int] | int = 3, strides: Sequence[int] | int = 1, paddings: Sequence[int] | int = 0, activation_class: Type[nn.Module] | Callable = <class 'torch.nn.modules.activation.ELU'>, activation_kwargs: dict | List[dict] | None = None, norm_class: Type[nn.Module] | Callable | None = None, norm_kwargs: dict | List[dict] | None = None, bias_last_layer: bool = True, aggregator_class: Type[nn.Module] | Callable | None = <class 'torchrl.modules.models.utils.SquashDims'>, aggregator_kwargs: dict | None = None, squeeze_output: bool = False, device: DEVICE_TYPING | None = None)[source]

一個 3D 卷積神經網路。

引數:
  • in_features (int, optional) – 輸入特徵的數量。如果未提供,將使用自動檢索輸入大小的惰性實現。

  • depth (int, optional) – 網路的深度。深度為 1 將生成一個具有所需輸入大小和輸出大小等於 num_cells 引數最後一個元素的單層線性網路。如果未指定 depth,則 depth 資訊應包含在 num_cells 引數中(見下文)。如果 num_cells 是一個可迭代物件並且指定了 depth,則兩者必須匹配:len(num_cells) 必須等於 depth

  • num_cells (intint 序列, optional) – 輸入和輸出之間每層的單元數量。如果提供一個整數,則每層將具有相同數量的單元,並且深度將從 depth 中獲取。如果提供一個可迭代物件,則線性層的 out_features 將與 num_cells 的內容匹配。預設為 [32, 32, 32],如果 depth 不為 None,則預設為 [32] * depth

  • kernel_sizes (int, int 序列, optional) – 卷積網路的核大小。如果是可迭代物件,其長度必須與由 num_cells 或 depth 引數定義的深度匹配。預設為 3

  • strides (intint 序列) – 卷積網路的步長。如果是可迭代物件,其長度必須與由 num_cells 或 depth 引數定義的深度匹配。預設為 1

  • activation_class (Type[nn.Module] 或 callable) – 要使用的啟用類或建構函式。預設為 ELU

  • activation_kwargs (dictdict 列表, optional) – 與啟用類一起使用的關鍵字引數。也可以提供一個長度為 depth 的關鍵字引數列表,每層一個元素。

  • norm_class (Typecallable, optional) – 歸一化類,如果存在。

  • norm_kwargs (dictdict 列表, optional) – 與歸一化層一起使用的關鍵字引數。也可以提供一個長度為 depth 的關鍵字引數列表,每層一個元素。

  • bias_last_layer (bool) – 如果為 True,則最後一個線性層將具有一個偏置引數。預設為 True

  • aggregator_class (Type[nn.Module] 或 callable) – 在鏈末端使用的聚合器類或建構函式。預設為 SquashDims

  • aggregator_kwargs (dict, optional) – aggregator_class 建構函式的關鍵字引數。

  • squeeze_output (bool) – 輸出是否應壓縮其單例維度。預設為 False

  • device (torch.device, optional) – 建立模組所在的裝置。

示例

>>> # All of the following examples provide valid, working MLPs
>>> cnet = Conv3dNet(in_features=3, depth=1, num_cells=[32,])
>>> print(cnet)
Conv3dNet(
    (0): Conv3d(3, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (1): ELU(alpha=1.0)
    (2): SquashDims()
)
>>> cnet = Conv3dNet(in_features=3, depth=4, num_cells=32)
>>> print(cnet)
Conv3dNet(
    (0): Conv3d(3, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (1): ELU(alpha=1.0)
    (2): Conv3d(32, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (3): ELU(alpha=1.0)
    (4): Conv3d(32, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (5): ELU(alpha=1.0)
    (6): Conv3d(32, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (7): ELU(alpha=1.0)
    (8): SquashDims()
)
>>> cnet = Conv3dNet(in_features=3, num_cells=[32, 33, 34, 35])  # defines the depth by the num_cells arg
>>> print(cnet)
Conv3dNet(
    (0): Conv3d(3, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (1): ELU(alpha=1.0)
    (2): Conv3d(32, 33, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (3): ELU(alpha=1.0)
    (4): Conv3d(33, 34, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (5): ELU(alpha=1.0)
    (6): Conv3d(34, 35, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (7): ELU(alpha=1.0)
    (8): SquashDims()
)
>>> cnet = Conv3dNet(in_features=3, num_cells=[32, 33, 34, 35], kernel_sizes=[3, 4, 5, (2, 3, 4)])  # defines kernels, possibly rectangular
>>> print(cnet)
Conv3dNet(
    (0): Conv3d(3, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1))
    (1): ELU(alpha=1.0)
    (2): Conv3d(32, 33, kernel_size=(4, 4, 4), stride=(1, 1, 1))
    (3): ELU(alpha=1.0)
    (4): Conv3d(33, 34, kernel_size=(5, 5, 5), stride=(1, 1, 1))
    (5): ELU(alpha=1.0)
    (6): Conv3d(34, 35, kernel_size=(2, 3, 4), stride=(1, 1, 1))
    (7): ELU(alpha=1.0)
    (8): SquashDims()
)
forward(inputs: Tensor) Tensor[source]

定義每次呼叫時執行的計算。

應由所有子類重寫。

注意

儘管前向傳播的實現需要在該函式內定義,但之後應呼叫 Module 例項而非此函式本身,因為前者負責執行註冊的鉤子,而後者會默默忽略它們。

文件

查閱 PyTorch 的完整開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並解答您的疑問

檢視資源