AssertionError при попытке объединить две модели и вписаться в Keras - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь разработать модель с субтитрами.Я имею в виду этот Github репозиторий .У меня есть три метода, и они выполняют следующее:

  1. Создает модель изображения
  2. Создает модель заголовка
  3. Объединяет изображение и модель заголовка вместе

Так как код длинный, я создал Gist, чтобы показать методы .

Вот сводка моей модели изображения и модели заголовка .

Но затем я запускаю код, я получаю эту ошибку:

TraceTraceback (most recent call last):
  File "trainer.py", line 99, in <module>
    model.fit([images, encoded_captions], one_hot_captions, batch_size = 1, epochs = 5)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/engine/training.py", line 950, in fit
    batch_size=batch_size)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/engine/training.py", line 671, in _standardize_user_data
    self._set_inputs(x)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/engine/training.py", line 575, in _set_inputs
    assert len(inputs) == 1
AssertionError

Поскольку ошибка исходит из библиотеки Keras, я понятия не имею, как ее отладить.Но что-то не так, когда я пытаюсь объединить их вместе.

Я хотел бы знать, если я что-то здесь упускаю

1 Ответ

0 голосов
/ 29 сентября 2018

Вам необходимо получить выходные данные моделей, используя атрибут output, а затем использовать Функциональный API Keras , чтобы иметь возможность объединить их (с помощью Concatenateслой или его эквивалентный функциональный интерфейс concatenate) и создайте итоговую модель:

from keras.models import Model

image_model = get_image_model()
language_model = get_language_model(vocab_size)

merged = concatenate([image_model.output, language_model.output])
x = LSTM(256, return_sequences = False)(merged)
x = Dense(vocab_size)(x)
out = Activation('softmax')(x)

model = Model([image_model.input, language_model.input], out)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
model.fit([images, encoded_captions], one_hot_captions, ...)

Поскольку это теперь в вашем коде, вы также можете определить функцию для логики создания модели:

def get_concatenated_model(image_model, language_model, vocab_size):
    merged = concatenate([image_model.output, language_model.output])
    x = LSTM(256, return_sequences = False)(merged)
    x = Dense(vocab_size)(x)
    out = Activation('softmax')(x)

    model = Model([image_model.input, language_model.input], out)
    return model
...