Слияние CNN и LSTM.RuntimeError: Вы должны скомпилировать вашу модель перед использованием - PullRequest
0 голосов
/ 28 января 2019

Я создаю модель, которая объединяет CNN и LSTM, но когда я хочу обучить ее, появляется сообщение об ошибке: RuntimeError: Вы должны скомпилировать свою модель перед ее использованием.

Я много пробовалвозможное решение для StackOverflow, например, Двунаправленный Keras "RuntimeError: Вы должны скомпилировать свою модель перед ее использованием".после завершения компиляции & Модель кодера-декодера Keras RuntimeError: Вы должны скомпилировать свою модель перед ее использованием

, но ни одна из них не может работать.

Я пробовалмножество возможных решений для StackOverflow, например, Двунаправленный Keras «RuntimeError: Вы должны скомпилировать свою модель перед ее использованием».после завершения компиляции & Модель кодера-декодера Keras RuntimeError: Вы должны скомпилировать свою модель перед ее использованием

, но ни одна из них не может работать.

в creat_model.py

def create_model(self, ret_model = False):
    #base_model = VGG16(weights='imagenet', include_top=False, input_shape = (224, 224, 3))
    #base_model.trainable=False
    image_model = Sequential()
    #image_model.add(base_model)
    #image_model.add(Flatten())
    image_model.add(Dense(EMBEDDING_DIM, input_dim = 4096, activation='relu'))

    image_model.add(RepeatVector(self.max_cap_len))

    lang_model = Sequential()
    lang_model.add(Embedding(self.vocab_size, 256, input_length=self.max_cap_len))
    lang_model.add(LSTM(256,input_shape=(40,256), return_sequences=True))
    lang_model.add(TimeDistributed(Dense(EMBEDDING_DIM)))

    model = Sequential()
    model.add(Concatenate([image_model, lang_model]))
    model.add(LSTM(1000,input_shape=(40,128), return_sequences=False))
    model.add(Dense(self.vocab_size))
    model.add(Activation('softmax'))

    print("Model created!")

    if(ret_model==True):
        return model

    model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
    return model

...

в train.py

def train_model(weight = None, batch_size=32, epochs = 10):

    cg = caption_generator.CaptionGenerator()
    model = cg.create_model()

    if weight != None:
        model.load_weights(weight)

    counter = 0
    file_name = 'weights-improvement-{epoch:02d}.hdf5'
    checkpoint = ModelCheckpoint(file_name, monitor='loss', verbose=1, save_best_only=True, mode='min')
    callbacks_list = [checkpoint]
    model.fit_generator(cg.data_generator(batch_size=batch_size), steps_per_epoch=cg.total_samples/batch_size, epochs=epochs, verbose=2, callbacks=callbacks_list)
    try:
        model.save('Models/WholeModel.h5', overwrite=True)
        model.save_weights('Models/Weights.h5',overwrite=True)
    except:
        print("Error in saving model.")
    print("Training complete...\n")
...