#python #tensorflow
Вопрос:
Я пытаюсь использовать сгруппированные 3D-свертки в Tensorflow 2, но я изо всех сил пытаюсь понять, почему все работает не так, как ожидалось. Вот соответствующая часть функции построения модели, где я указываю количество фильтров f1
.
... # f1 is an integer, specifying the number of filters x = Conv3D(f1, kernel_size=(1, 1, 1))(x) x = BatchNormalization()(x) print(x.shape) x = Conv3D(3*f1, kernel_size=(3, 3, 3), padding='same', groups=3)(x) print(x.shape) ...
Согласно документации (и интуиции тоже), при использовании groups
параметра,
[…] Каждая группа свернута отдельно с фильтрами / фильтрами групп. Результатом является объединение результатов всех групп вдоль оси канала. Входные каналы и фильтры должны быть разделены на группы.
В частности, предположим, что f1=12
, input channels=12
и filters=36
, которые оба делятся на количество групп (3). Вывод print
утверждений на самом деле
(None, 35, 35, 19, 12) (None, 35, 35, 19, 36)
и поэтому я ожидаю, что он будет работать должным образом. Вместо этого я получаю
Количество каналов в фильтре (4) должно соответствовать последнему размеру входного сигнала (12)
что как-то противоречит моему здравому смыслу. Похоже, что «4» канала в каждом фильтре получаются из деления 12 на количество групп (3), которое, как ожидает Tensorflow, тем не менее будет равно количеству самих входных каналов (12). Я пробовал использовать различные комбинации входных и выходных фильтров, всегда делящихся на 3, но это никогда не срабатывает.
Я определенно что-то здесь упускаю. Большое вам спасибо, если у вас есть какие-либо предложения о том, что я могу делать неправильно!