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

Класс AdaptiveAvgPool1d

Класс AdaptiveAvgPool1d модуля nn выполняет адаптивное усредняющее пулингование (pooling) для одномерных входных данных. В отличие от обычного AvgPool1d, этот слой не требует указывать размер окна и шаг. Вместо этого он принимает целевой размер выходного тензора по пространственному измерению и автоматически подбирает параметры пулинга, чтобы достичь этого размера. Это особенно полезно, когда входные данные имеют переменную длину, а выход должен быть фиксированного размера. На вход слой принимает тензор формы (batch, channels, length) или (channels, length). Единственным обязательным параметром конструктора является output_size - целевой размер выходного тензора по последнему измерению.

Синтаксис

torch.nn.AdaptiveAvgPool1d(output_size)

Параметры

Конструктор класса принимает следующие параметры:

  • output_size - целевой размер выходного тензора по пространственному измерению. Может быть целым числом или значением None. Если указано целое число, выходная длина будет равна этому значению. Если указать None, то размерность не изменяется.

Пример

Рассмотрим базовый пример применения слоя AdaptiveAvgPool1d к одномерному тензору:

import torch import torch.nn as nn # Создаём слой с целевым размером 2 layer = nn.AdaptiveAvgPool1d(output_size=2) # Входной тензор формы (batch=1, channels=1, length=5) t = torch.tensor([[[1, 2, 3, 4, 5]]], dtype=torch.float) print(t.shape) # Применяем слой res = layer(t) print(res)

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

torch.Size([1, 1, 5]) tensor([[[1.5000, 4.0000]]])

Пример

Адаптивный пулинг автоматически разбивает входную последовательность на участки и вычисляет среднее для каждого участка. Чем больше целевой размер, тем мельче разбиение:

import torch import torch.nn as nn # Слой с целевым размером 3 layer = nn.AdaptiveAvgPool1d(output_size=3) t = torch.tensor([[[1, 2, 3, 4, 5, 6, 7, 8, 9]]], dtype=torch.float) res = layer(t) print(res)

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

tensor([[[2., 5., 8.]]])

Пример

Слой можно применять к батчу данных с несколькими каналами. Пулинг происходит независимо для каждого канала и каждого элемента батча:

import torch import torch.nn as nn torch.manual_seed(0) layer = nn.AdaptiveAvgPool1d(output_size=4) # Батч из 2 элементов, 3 канала, длина 8 t = torch.randn(2, 3, 8) print(t.shape) res = layer(t) print(res.shape)

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

torch.Size([2, 3, 8]) torch.Size([2, 3, 4])

Пример

Если передать output_size=None, слой не изменяет размерность данных. Это может быть полезно для унификации интерфейса при работе с разными слоями:

import torch import torch.nn as nn layer = nn.AdaptiveAvgPool1d(output_size=None) t = torch.tensor([[[1, 2, 3, 4, 5, 6]]], dtype=torch.float) res = layer(t) print(res)

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

tensor([[[1., 2., 3., 4., 5., 6.]]])

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

  • класс AvgPool1d,
    который выполняет усредняющий пулинг с фиксированным окном и шагом
  • класс MaxPool1d,
    который выполняет максимальный пулинг для одномерных данных
  • класс AdaptiveAvgPool2d,
    который выполняет адаптивный усредняющий пулинг для двумерных данных
  • класс AdaptiveMaxPool1d,
    который выполняет адаптивный максимальный пулинг для одномерных данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить