Spec-Zone.ru › PyTorch 2

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]

Применяет 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=0Cin−1weight(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 взаимной корреляции

Этот модуль поддерживает TensorFloat32.

На некоторых устройствах ROCm, при использовании входных данных с плавающей запятой 16-го порядка, этот модуль будет использовать разную точность для обратного распространения.

  • stride определяет шаг для взаимной корреляции.
  • padding определяет количество добавочных значений, используемых в дополнении входных данных. Оно может быть строкой {‘valid’, ‘same’} или кортежем целых чисел, определяющих количество добавочных значений с каждой стороны.
  • dilation определяет расстояние между точками ядра; также известно как алгоритм à trous. Его сложнее описать, но в этом ссылке есть наглядная визуализация того, что dilation делает.
  • groups определяет соединения между входами и выходами. in_channels и out_channels должны быть кратны groups. Например,

    • При groups=1 все входы свёртываются ко всем выходам.
    • При groups=2 операция становится эквивалентной двум свёрточным слоям, расположенным рядом, каждый из которых обрабатывает половину входных каналов и производит половину выходных каналов, а затем оба конкатенируются.
    • При groups= in_channels, каждый входной канал свёртывается со своим набором фильтров (размером out_channelsin_channels\frac{\text{out\_channels}}{\text{in\_channels}}).

Параметры kernel_size, stride, padding, dilation могут быть:

  • единственным int – в этом случае одно и то же значение используется для глубины, высоты и ширины;
  • кортежем из трёх целых чисел – в этом случае первое int используется для измерения глубины, второе int для измерения высоты, а третье int для измерения ширины;

Примечание

Когда groups == in_channels и out_channels == K * in_channels, где K является положительным целым числом, эта операция также известна как «глубинная свёртка».

Другими словами, для входных данных размером (N,Cin,Lin)(N, C_{in}, L_{in}), глубинная свёртка с коэффициентом K может быть выполнена с аргументами (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}).

Примечание

В некоторых случаях, при использовании тензоров на устройстве CUDA и CuDNN, этот оператор может выбрать недетерминированный алгоритм для повышения производительности. Если это нежелательно, можно попытаться сделать операцию детерминированной (возможно, с затратами на производительность) путём установки torch.backends.cudnn.deterministic = True. Подробнее см. Воспроизводимость.

Примечание

padding='valid' равносильно отсутствию заполнения. padding='same' заполняет входные данные так, чтобы размер выходных данных соответствовал размеру входных данных. Однако этот режим не поддерживает значения шага, отличные от 1.

Примечание

Этот модуль поддерживает комплексные типы данных, т.е. complex32, complex64, complex128.

Параметры
  • in_channels (int) – Количество каналов в входном изображении
  • out_channels (int) – Количество каналов, генерируемых свёрткой
  • kernel_size (int или кортеж) – Размер свёрточного ядра
  • stride (int или кортеж, необязательно) – Шаг свёртки. По умолчанию: 1
  • padding (int, кортеж или строка, необязательно) – Заполнение, добавляемое ко всем шести сторонам входных данных. По умолчанию: 0
  • padding_mode (строка, необязательно) – 'zeros', 'reflect', 'replicate' или 'circular'. По умолчанию: 'zeros'
  • dilation (int или кортеж, необязательно) – Расстояние между элементами ядра. По умолчанию: 1
  • groups (int, необязательно) – Количество блокированных соединений от входных каналов к выходным каналам. По умолчанию: 1
  • bias (bool, необязательно) – Если True, добавляет обучаемый смещение к выходу. По умолчанию: True
Форма:
  • Вход: (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×padding[0]−dilation[0]×(kernel_size[0]−1)−1stride[0]+1⌋D_{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×padding[1]−dilation[1]×(kernel_size[1]−1)−1stride[1]+1⌋H_{out} = \left\lfloor\frac{H_{in} + 2 \times \text{padding}[1] - \text{dilation}[1] \times (\text{kernel\_size}[1] - 1) - 1}{\text{stride}[1]} + 1\right\rfloor
    Wout=⌊Win+2×padding[2]−dilation[2]×(kernel_size[2]−1)−1stride[2]+1⌋W_{out} = \left\lfloor\frac{W_{in} + 2 \times \text{padding}[2] - \text{dilation}[2] \times (\text{kernel\_size}[2] - 1) - 1}{\text{stride}[2]} + 1\right\rfloor
Переменные
  • weight (Тензор) – обучаемые веса модуля формы (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=groupsCin∗∏i=02kernel_size[i]k = \frac{groups}{C_\text{in} * \prod_{i=0}^{2}\text{kernel\_size}[i]}
  • bias (Тензор) – обучаемый смещение модуля формы (out_channels). Если bias True, то значения этих весов берутся из U(−k,k)\mathcal{U}(-\sqrt{k}, \sqrt{k}), где k=groupsCin∗∏i=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)

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.Conv3d.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API