ValueError: Ошибка при проверке ввода: ожидалось, что input_9 будет иметь 3 измерения, но получил массив с формой (80, 2048) - PullRequest
0 голосов
/ 01 октября 2019

В настоящее время я пытаюсь построить работающую модель lstm в Керасе, которая получает вложение от CNN, предшествующее RNN. CNN показывает ожидаемое поведение, но я не уверен на 100%, смогу ли я просто передать Внедрение из CNN в RNN.

def model_builder(input_shape):
    base_input = Input(shape = input_shape)
    x = LSTM(units=1, name='LSTM1', return_sequences=True)(base_input)
    x = Flatten()(x)
    x = Dense(units = 2)(x)
    x = Activation('softmax')(x)
    classification_model = Model(base_input, x,name='classifier')
    classification_model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

    return classification_model

embedding_model = build_model((256, 256, 3))
classification_model = model_builder((2048,1,))

try:
    image_embedding = embedding_model.predict(X)

    outcome = classification_model.fit(x=image_embedding, y=Y, batch_size=10, epochs=20, verbose=1, 
              callbacks=None, validation_split=0.5, validation_data=None, shuffle=False, 
              class_weight=None,sample_weight=None, initial_epoch=0, steps_per_epoch=None, 
              validation_steps=None, validation_freq=1)
except KeyboardInterrupt:
    pass

Когда я запускаю тренировку, как это, я получаю это сообщение об ошибке:

1 Ответ

0 голосов
/ 01 октября 2019

Настройка кода, как это решило это для меня. Проблема заключалась в том, что мне нужно было добавить измерение времени в мое вложение, которое я проходил через мой lstm. Таким образом, в основном происходит от (batch_size, input_dimension) до (batch_size, input_dimension, timesteps). Порядок этих измерений может быть неправильным. Я все еще должен проверить это, но это решение должно по крайней мере заставить модель работать.

image_embedding = embedding_model.predict(X)
new_image_embedding = image_embedding[:,:,np.newaxis]

outcome = classification_model.fit(x=new_image_embedding, y=Y, batch_size=batch_size, 
          epochs=epochs, verbose=1, callbacks=None, validation_split=0.5,  
          validation_data=None, shuffle=False, class_weight=None, sample_weight=None, 
          initial_epoch=0, steps_per_epoch=None, validation_steps=None, 
          validation_freq=1)
...