Как да приложа конволюция върху последните три измерения на 5D тензор с помощта на Conv2D в Keras?

Обикновено входният тензор на Conv2D в Keras е 4D тензор с измерение batch_size * n * n * channel_size. Сега имам 5D тензор с измерение batch_size * N * n * n * channel_size и искам да приложа 2D конволюционния слой за последните три измерения за всяко i в N. Например, ако размерът на ядрото е 1, тогава очаквам, че изходът ще има измерение batch_size * N * n * n * 1.

Някой знае ли някои лесни начини да го внедрите с Keras?

Например за напълно свързания слой Keras може да го направи автоматично. Ако входът има формата batch_size * N * n, тогава плътният слой в Keras ще зададе FC слой за всяко i в N. Следователно ще получим изхода с batch_size * N * m, ако зададем Dense(m).


person Z. Ye    schedule 07.01.2019    source източник


Отговори (1)


Можете да използвате обвивката на слоя TimeDistributed, за да приложите един и същ слой за навиване върху всички изображения в 5D тензор. Например:

model = Sequential()
model.add(TimeDistributed(Conv2D(5, (3,3), padding='same'), input_shape=(10, 100, 100, 3)))

model.summary()

Резюме на модела:

Layer (type)                 Output Shape              Param #   
=================================================================
time_distributed_2 (TimeDist (None, 10, 100, 100, 5)   140       
=================================================================
Total params: 140
Trainable params: 140
Non-trainable params: 0
_________________________________________________________________
person today    schedule 07.01.2019
comment
Много бърз отговор! Веднага ще го пробвам :) - person Z. Ye; 07.01.2019
comment
Всъщност работи, но не точно по начина, който очаквах. Изглежда, че теглата са еднакви за всеки времеви параметър i в N. Исках обаче да задам различни тегла за всеки i. - person Z. Ye; 07.01.2019
comment
@Z.Ye Разбира се и аз споменах това в отговора си. Освен това, това е и случаят с примера за слой Dense, който предоставихте, т.е. теглата са фиксирани. Ако искате различни тегла и N е известно, можете лесно да напишете for цикъл, за да направите това. - person today; 07.01.2019
comment
Да, прав си. Плътният слой също направи това, което описахте. Тогава ще опитам цикъл. - person Z. Ye; 07.01.2019
comment
Съжалявам, че не мога да гласувам за отговора ви. Опитах малко for цикъла, но не работи перфектно. Публикувах въпрос тук stackoverflow.com/questions/54093755/ . Бихте ли ми подсказали? Благодаря ти много. - person Z. Ye; 08.01.2019