Я использую API CNN PyTorch для создания одномерного сверточного слоя. В качестве примера рассмотрим следующее:
CNN = nn.Conv1d(
in_channels=1,
out_channels=1,
kernel_size=10,
padding=?
)
Пока игнорируйте компонент заполнения.
Таким образом, этот слой будет принимать последовательность из N элементов (скажем, N=100). И использует скользящее сверточное окно размером 10 для вывода последовательности размера M.
Я хочу добавить отступы только к левой части последовательности, чтобы результат имел размер точно N-1.
Я обнаружил, что формула left_hand_padding = kernel_size - 2 способна вывести правильное дополнение, позволяющее добиться этого.
Но я не могу найти ресурсы о том, как я могу закодировать это асимметричное дополнение. Если я попытаюсь установить параметр заполнения в nn.Conv1d() на kernel_size - 2, дополнятся как правая, так и левая стороны ввода.
Я также попробовал ввести кортеж (kernel_size - 2, 0) (элемент 0 — это заполнение слева, элемент 1 — заполнение справа). Но это дало мне ошибку:
RuntimeError: ожидалось, что дополнение будет одним целочисленным значением или списком из 1 значений, соответствующих размерам свертки, но получено дополнение = [8, 0]
Это асимметричное заполнение просто не поддерживается?





Вам нужно будет дополнить его явно. Установите отступ свертки на 0 и используйте x = nn.funtional.pad(x, (kernel_size - 2, 0), ...). Подробнее можно прочитать здесь.
nn.Pad это то, что тебе нужно
Спасибо. Я использовал nn.ZeroPad1d и это сработало.
Спасибо, а можно как-нибудь вставить это в
nn.Sequential? Мне нравится с его помощью объединять все мои сверточные слои в один.