Как использовать повторный вектор, чтобы предсказать последовательность вывода? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь определить модель, которая работает для последовательности изображений и пытается предсказать последовательность по очереди.Моя проблема с вектором повторения, в частности, правильно ли он используется и, во-вторых, как устранить исключение, которое я получаю.

input_frames=Input(shape=(None, 128, 64, 1))
x=ConvLSTM2D(filters=64, kernel_size=(5, 5), padding='same', return_sequences=True)(input_frames)
x=BatchNormalization()(x)
x=ConvLSTM2D(filters=64, kernel_size=(5, 5), padding='same', return_sequences=False)(x)
x=BatchNormalization()(x)
x=Conv2D(filters=1, kernel_size=(5, 5), activation='sigmoid',padding='same')(x)
x=RepeatVector(10)(x)
model=Model(inputs=input_frames,outputs=x)

В частности, я пытаюсь прогнозировать 10 кадров в будущем.Приведенный выше код выдает следующее исключение:

assert_input_compatibility
str(K.ndim(x)))
ValueError: Input 0 is incompatible with layer repeat_vector_5: expected ndim=2, found ndim=4

1 Ответ

0 голосов
/ 13 февраля 2019

Из документа RepeatVector , он принимает только двухмерные входы, это то, о чем говорит сообщение об ошибке.

Ниже приведен обходной путь с использованием слоя Lambda:

from keras.layers import Input, ConvLSTM2D, BatchNormalization, RepeatVector, Conv2D
from keras.models import Model
from keras.backend import expand_dims, repeat_elements
from keras.layers import Lambda

input_frames=Input(shape=(None, 128, 64, 1))
x=ConvLSTM2D(filters=64, kernel_size=(5, 5), padding='same', return_sequences=True)(input_frames)
x=BatchNormalization()(x)
x=ConvLSTM2D(filters=64, kernel_size=(5, 5), padding='same', return_sequences=False)(x)
x=BatchNormalization()(x)
x=Conv2D(filters=1, kernel_size=(5, 5), activation='sigmoid',padding='same')(x)
#x=RepeatVector(10)(x)
x=Lambda(lambda x: repeat_elements(expand_dims(x, axis=1), 10, 1))(x)
model=Model(inputs=input_frames,outputs=x)
model.summary()

"""
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_15 (InputLayer)        (None, None, 128, 64, 1)  0         
_________________________________________________________________
conv_lst_m2d_5 (ConvLSTM2D)  (None, None, 128, 64, 64) 416256    
_________________________________________________________________
batch_normalization_5 (Batch (None, None, 128, 64, 64) 256       
_________________________________________________________________
conv_lst_m2d_6 (ConvLSTM2D)  (None, 128, 64, 64)       819456    
_________________________________________________________________
batch_normalization_6 (Batch (None, 128, 64, 64)       256       
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 128, 64, 1)        1601      
_________________________________________________________________
lambda_1 (Lambda)            (None, 10, 128, 64, 1)    0         
=================================================================
Total params: 1,237,825
Trainable params: 1,237,569
Non-trainable params: 256
_________________________________________________________________
"""

Обратите внимание, что здесь я использую expand_dims, поскольку, начиная с документа repeat_elements , он не будет создавать новую ось.

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