@AlexeyUral

Torch размер tensor — ошибка?

Добрый день.

Сын проходил курс по обучению по программированию нейросетей.
В одном из заданий, где необходимо создать класс InceptionBlock, возникла ошибка: "RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 2 but got size 4 for tensor number 2 in the list." Я не знаю как эту ошибку исправить. Не могли бы вы помочь мне исправить эту ошибку? Вот код с комментариями:

class InceptionBlock(Module):
def init(self, c_in, c_1, c_3, c_5):
# Необходимый для проверки корректности работы inception-блока код.
set_seed()

super().init()

# TODO: Свёртка C1 размера 1x1.
self.c1 = Conv2d(
in_channels=1, # Число каналов на входе
out_channels=10, # Число каналов на выходе
kernel_size=1, # Размер ядра
# padding=1, # Размер паддинга (1 элемент добавляется с каждой стороны)
# padding_mode="zeros", # Указываем что в паддинге проставляем нули вдоль границ входного тензора
)
# TODO: Свёртка C5 размера 1x1.
self.c5 = Conv2d(
in_channels=1, # Число каналов на входе
out_channels=10, # Число каналов на выходе
kernel_size=1, # Размер ядра
# padding=1, # Размер паддинга (1 элемент добавляется с каждой стороны)
# padding_mode="zeros", # Указываем что в паддинге проставляем нули вдоль границ входного тензора
)
# TODO: Свёртка C2 размера 3x3. Параметр padding = 1.
self.c2 = Conv2d(
in_channels=10, # Число каналов на входе
out_channels=20, # Число каналов на выходе
kernel_size=(3,3), # Размер ядра
padding=1, # Размер паддинга (1 элемент добавляется с каждой стороны)

)

# TODO: Свёртка C6 размера 1x1.
self.c6 = Conv2d(
in_channels=1, # Число каналов на входе
out_channels=10, # Число каналов на выходе
kernel_size=1, # Размер ядра
# padding=1, # Размер паддинга (1 элемент добавляется с каждой стороны)
# padding_mode="zeros", # Указываем что в паддинге проставляем нули вдоль границ входного тензора
)
# TODO: Свёртка C3 размера 5x5. Параметр padding = 2.
self.c3 = Conv2d(
in_channels=10, # Число каналов на входе
out_channels=30, # Число каналов на выходе
kernel_size=3, # Размер ядра
padding=2, # Размер паддинга (1 элемент добавляется с каждой стороны)
padding_mode="zeros", # Указываем что в паддинге проставляем нули вдоль границ входного тензора
)

# TODO: MaxPooling 2D MP1 размера 3x3. Параметры stride = 1, padding = 1.
self.mp1 = MaxPool2d(
kernel_size=3, # Размер ядра
padding=1, # Размер паддинга (1 элемент добавляется с каждой стороны)
stride=1, # Stride - 1 (смотрим на каждую позицию)
)
# TODO: Свёртка C4 размера 1x1.
self.c4 = Conv2d(
in_channels=1, # Число каналов на входе
out_channels=10, # Число каналов на выходе
kernel_size=1, # Размер ядра
# padding=1, # Размер паддинга (1 элемент добавляется с каждой стороны)
# padding_mode="zeros", # Указываем что в паддинге проставляем нули вдоль границ входного тензора
)


# Полная ветка блока со свёрткой 3x3.
self.block_3_3 = Sequential(
self.c5,
self.c2,
)

# Полная ветка блока со свёрткой 5x5.
self.block_5_5 = Sequential(
self.c6,
self.c3,
)

# Полная ветка блока с MaxPooling 2D.
self.block_pool = Sequential(
self.mp1,
self.c4,
)

def forward(self, x):
# В качестве результата работы inception-блок возвращает
# соединение по размерности каналов результатов работы внутренних
# свёрток и MaxPooling 2D.
return cat([
self.c1(x),
self.block_3_3(x),
self.block_5_5(x),
self.block_pool(x),
], dim=1)
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы