поднять RuntimeError («Вы должны скомпилировать свою модель перед использованием.») в Keras на fit.generator - PullRequest
0 голосов
/ 12 октября 2019

Я работаю над моделью подписи к изображению. Во время обучения модели я получаю ошибку компиляции. Я пробовал много решений, но не могу решить проблему. Кроме того, мой код был в старой версии Keras. Я использую Keras 2.2.4: пожалуйста, посмотрите ниже код, написанный в старой версии Keras:

import numpy as np
import pandas as pd
from keras.models import Sequential, Model
from keras.layers import LSTM, Embedding, TimeDistributed, Dense, RepeatVector, Activation
from keras.layers.merge import Concatenate
from keras.preprocessing import image, sequence
import pickle as pickle

def create_model(self, ret_model = False):  
        image_model = Sequential()
        image_model.add(Dense(EMBEDDING_DIM, input_dim = 4096, activation='relu'))
        image_model.add(RepeatVector(self.max_length))

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

        model = Sequential()
        model.add(Merge([image_model, lang_model], mode='concat'))
        model.add(LSTM(1000,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

Я изменил код так, как это. Библиотеки такие же, как я показал в первом коде. Пожалуйста, смотрите ниже измененный код:

def create_model(self, ret_model = False):
        image_model = Sequential()
        image_model.add(Dense(EMBEDDING_DIM, input_dim = 4096, activation='relu'))
        image_model.add(RepeatVector(self.max_length))

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

        model = Sequential()
        #model.add(Merge([image_model, lang_model], mode='concat'))
        model.add(Concatenate([image_model, lang_model])) #changed the above commented line to this
        model.add(LSTM(1000,  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

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

Using TensorFlow backend.
413439
WARNING:tensorflow:From C:\Users\UserName\Anaconda3\lib\site- 
packages\tensorflow\python\framework\op_def_library.py:263: colocate_with (from 
tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
Model created!
Traceback (most recent call last):
  File "D:\Image-caption\Image-Captioning-master\train.py", line 14, in <module>
    train(int(sys.argv[1]))
  File "D:\Image-caption\Image-Captioning-master\train.py", line 9, in train
    model.fit_generator(sd.data_process(batch_size=batch_size), 
 steps_per_epoch=sd.no_samples/batch_size, epochs=epoch, verbose=2, callbacks=None)
  File "C:\Users\UserName\Anaconda3\lib\site-packages\keras\legacy\interfaces.py", line 91, in 
wrapper
    return func(*args, **kwargs)
  File "C:\Users\UserName\Anaconda3\lib\site-packages\keras\engine\training.py", line 1418, in 
  fit_generator
  initial_epoch=initial_epoch)
  File "C:\Users\UserName\Anaconda3\lib\site-packages\keras\engine\training_generator.py", line 40, 
  in fit_generator
    model._make_train_function()
  File "C:\Users\UserName\Anaconda3\lib\site-packages\keras\engine\training.py", line 496, in 
  _make_train_function
    raise RuntimeError('You must compile your model before using it.')
RuntimeError: You must compile your model before using it.

Это мой код файла train.py:

import SceneDesc
import sys

def train(epoch):
    sd = SceneDesc.scenedesc()
    model = sd.create_model()
    batch_size = 512
    model.fit_generator(sd.data_process(batch_size=batch_size), 
    steps_per_epoch=sd.no_samples/batch_size, epochs=epoch, verbose=2, callbacks=None)
    model.save('Output/Model.h5', overwrite=True)
    model.save_weights('Output/Weights.h5',overwrite=True)

if __name__=="__main__":
    train(int(sys.argv[1]))

Я новичок и на этапе обучения. Я пытаюсь решить эту проблему в течение достаточно долгого времени, но не могу решить проблему. Я также предоставил ссылку на мои файлы в dpaste. Вот ссылка: https://dpaste.de/t2yU и https://dpaste.de/cVGP ... Хотя это только два файла. Я старался изо всех сил, чтобы задать четкий вопрос. Я надеюсь получить положительный ответ. :) Любая помощь будет оценена.

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