Сын проходил курс по обучению по программированию нейросетей.
В одном из заданий, где необходимо создать класс 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", # Указываем что в паддинге проставляем нули вдоль границ входного тензора
)
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)