Как построить предварительно обученную сеть CNN-LSTM с Keras - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь использовать сеть CNN-LSTM с Keras для анализа видео.Я прочитал об этом и столкнулся с функцией TimeDistributed и некоторыми примерами.

На самом деле, я попробовал описанную ниже сеть, которая на самом деле состоит из сверточного и объединяющего слоев, за которыми следуют повторяющиеся и плотные слои.

model = Sequential()
model.add(TimeDistributed(Conv2D(2, (2,2), activation= 'relu' ), input_shape=(None, IMG_SIZE, IMG_SIZE, 3)))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(50))
model.add(Dense(50, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam' , metrics = ['acc'])

Я не проверял модель должным образом, так как мой набор данных слишком мал.Тем не менее, в процессе обучения сеть достигает точности 0,98 в 4-5 эпохах (возможно, это переоснащение, но это пока не проблема, потому что я надеюсь получить подходящий набор данных позже).

Затем я прочитал о том, как использовать предварительно обученную сверточную сеть (MobileNet, ResNet или Inception) в качестве экстрактора функций для сети LSTM, так что я использую следующий код:

inputs = Input(shape = (frames, IMG_SIZE, IMG_SIZE, 3))
cnn_base = InceptionV3(include_top = False, weights='imagenet', input_shape = (IMG_SIZE, IMG_SIZE, 3))

cnn_out = GlobalAveragePooling2D()(cnn_base.output)
cnn = Model(inputs=cnn_base.input, outputs=cnn_out)
encoded_frames = TimeDistributed(cnn)(inputs)
encoded_sequence = LSTM(256)(encoded_frames)

hidden_layer = Dense(1024, activation="relu")(encoded_sequence)
outputs = Dense(50, activation="softmax")(hidden_layer)
model = Model([inputs], outputs)

В этом случаепри обучении модели она всегда показывает точность ~ 0,02 (это базовая линия 1/50).

Поскольку первая модель хотя бы чему-то научилась, мне интересно, есть ли какая-либо ошибка скак сеть строится во втором случае.

Кто-нибудь сталкивался с такой ситуацией?Любой совет?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...