Полностью связанный слой в VGG является 2D, а 1D сверточный слой ожидает 3D-данные.
В тот момент, когда VGG добавляет слой Dense
, он уничтожает формат изображения (4D) со сглаживанием или глобальным пулом, превращая его в простые данные (2D). У вас больше нет размеров для использования сверток.
Если вы попытаетесь объяснить, почему вам нужен Conv1D
, что вы ожидаете от него, тогда мы могли бы подумать об альтернативе.
Пример модели:
movie_data = any_data_with_shape((number_of_videos, frames, 224, 224, 3))
movie_input = Input((None,224,224,3)) #None means any number of frames
vgg = VGG16(include_top=True,weights='imagenet')
Эта часть необходима, только если вы получаете промежуточные выходные данные от vgg:
vgg_in = vgg.input
vgg_out = vgg.get_layer('fc2').output #make sure this layer exists
vgg = Model(vgg_in, vgg_out)
Продолжение:
vgg_outs = TimeDistributed(vgg)(movie_input) #out shape (None, frames, fc2_units)
outs = Conv1D(.....)(vgg_outs)
outs = GlobalAveragePooling1D()(outs)
outs = Dense(....)(outs)
.....
your_model = model(move_input, outs)