РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
411 of 769 menu

Функция conv2d

Функция conv2d из модуля torch.nn.functional применяет двумерную свертку к входному тензору. Эта операция является ключевой в обработке изображений и анализе пространственных данных. В отличие от слоя nn.Conv2d, функциональная версия не хранит параметры внутри себя, что делает её удобной для динамических вычислений.

Первым параметром функция принимает входной тензор, вторым - тензор весов свертки, третьим - тензор смещения. Также можно указать шаг свертки, отступы, коэффициент расширения и количество групп.

Синтаксис

torch.nn.functional.conv2d( input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1 )

Пример

Выполним простую свертку одноканального изображения размером 5x5 с ядром 3x3:

import torch import torch.nn.functional as F t = torch.tensor([ [1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [1, 3, 5, 7, 9], [2, 4, 6, 8, 0], [5, 6, 7, 8, 9], ]).float().reshape(1, 1, 5, 5) w = torch.tensor([ [1, 0, -1], [1, 0, -1], [1, 0, -1], ]).float().reshape(1, 1, 3, 3) res = F.conv2d(t, w) print(res)

Результат выполнения кода:

tensor([[[[-12., -12., -12.], [-12., -15., -12.], [-12., -15., -12.]]]])

Пример

Применим свертку с параметром padding для сохранения пространственной размерности:

import torch import torch.nn.functional as F t = torch.tensor([ [1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [1, 3, 5, 7, 9], ]).float().reshape(1, 1, 3, 5) w = torch.tensor([ [1, 0, -1], [1, 0, -1], ]).float().reshape(1, 1, 2, 3) res = F.conv2d(t, w, padding=1) print(res)

Результат выполнения кода:

tensor([[[[ -8., -10., -12., -8., 0.], [-11., -13., -11., -13., 0.], [ 6., 1., -7., -9., 0.]]]])

Пример

Используем параметр stride для пропуска пикселей и уменьшения размерности:

import torch import torch.nn.functional as F t = torch.tensor([ [1, 2, 3, 4, 5, 6], [6, 7, 8, 9, 0, 1], [1, 3, 5, 7, 9, 2], [2, 4, 6, 8, 0, 3], [5, 6, 7, 8, 9, 4], ]).float().reshape(1, 1, 5, 6) w = torch.tensor([ [1, 0, -1], [1, 0, -1], ]).float().reshape(1, 1, 2, 3) res = F.conv2d(t, w, stride=2) print(res)

Результат выполнения кода:

tensor([[[[-14., -16., -12.], [-14., -18., -12.]]]])

Пример

Применим свертку к многоканальному изображению с несколькими ядрами:

import torch import torch.nn.functional as F torch.manual_seed(0) t = torch.randn(1, 3, 4, 4) w = torch.randn(2, 3, 2, 2) b = torch.randn(2) res = F.conv2d(t, w, b, padding=1) print(res.shape)

Результат выполнения кода:

torch.Size([1, 2, 4, 4])

Смотрите также

  • функцию conv1d,
    которая выполняет одномерную свертку
  • функцию conv3d,
    которая выполняет трехмерную свертку
  • функцию conv_transpose2d,
    которая выполняет двумерную транспонированную свертку
  • функцию unfold,
    которая извлекает скользящие локальные блоки из тензора
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить