PyTorch: свертка одноканального изображения с использованием torch.nn.Conv2d - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь использовать сверточный слой для свертывания изображения в оттенках серого (однослойного) (хранится в виде массива numpy). Вот код:

conv1 = torch.nn.Conv2d(in_channels = 1, out_channels = 1, kernel_size = 33)
tensor1 = torch.from_numpy(img_gray)
out_2d_np = conv1(tensor1)

out_2d_np = np.asarray(out_2d_np)

Я хочу, чтобы мое ядро ​​было 33х33, а количество выходных слоев должно быть равно количеству входных слоев, которое равно 1, поскольку RGB-каналы изображения суммируются. Когда out_2d_np = conv1(tensor1) запускается, он выдает следующую ошибку времени выполнения:

RuntimeError: Ожидаемый 4-мерный ввод для 4-мерного веса 1 1 33 33, но получил 2-мерный ввод размера [246, 248] вместо

Есть идеи, как мне это решить? Я специально хочу использовать torch.nn.Conv2d() класс / функцию.

Заранее благодарен за любую помощь!

1 Ответ

2 голосов
/ 26 февраля 2020

Pytorch's Conv2d ожидает, что его двумерные входы фактически будут иметь размеры 4 : мини-пакетное затемнение, затемнение канала и два пространственных измерения.
Ваш входной тензор имеет только два пространственных измерения, и он не хватает мини-партии и размеров канала. В вашем случае эти два измерения на самом деле являются измерениями одного размера (размеры с размером = 1).

try:

conv1(tensor1[None, None, ...])
...