Spec-Zone.ru › PyTorch 1

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 могут быть:

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

Примечание

Когда 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.

Parameters:
  • in_channels (int) – Количество каналов на входном изображении
  • out_channels (int) – Количество каналов, производимых сверткой
  • kernel_size (int or tuple) – Размер ядра свертки
  • stride (int or tuple, optional) – Шаг свертки. По умолчанию: 1
  • padding (int, tuple or str, optional) – Заполнение, добавляемое ко всем шести сторонам входа. По умолчанию: 0
  • padding_mode (str, optional) – 'zeros', 'reflect', 'replicate' или 'circular'. По умолчанию: 'zeros'
  • dilation (int or tuple, optional) – Расстояние между элементами ядра. По умолчанию: 1
  • groups (int, optional) – Количество блочных соединений от входных каналов к выходным каналам. По умолчанию: 1
  • bias (bool, optional) – Если 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/1.13/generated/torch.nn.Conv3d.html

Spec-Zone.ru

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