«KeyError: 0» при попытке загрузить последовательную модель в Keras - PullRequest
0 голосов
/ 20 октября 2018

Я обучил последовательную модель в Керасе, используя Google Colab для работы с набором данных Google Doodle.Здесь я делаю простую классификацию изображений.

Следующая функция определяет архитектуру моей модели:

def create_model(input_shape):
   model = keras.Sequential()  
   model.add(layers.Conv2D(16, (3, 3), padding = 'same', input_shape = input_shape, activation = 'relu'))
   model.add(layers.BatchNormalization(axis = 3)) 
   model.add(layers.MaxPooling2D(pool_size = (2, 2)))

   model.add(layers.Conv2D(32, (3, 3), padding = 'same', activation = 'relu'))
   model.add(layers.BatchNormalization(axis = 3))
   model.add(layers.MaxPooling2D(pool_size = (2, 2)))

   model.add(layers.Conv2D(64, (3, 3), padding = 'same', activation = 'relu'))
   model.add(layers.BatchNormalization(axis = 3))
   model.add(layers.MaxPooling2D(pool_size = (2,2)))

   model.add(layers.Flatten())
   model.add(layers.Dense(128, activation = 'relu'))
   model.add(layers.Dense(28, activation = 'softmax')) 

   return model

, и следующий фрагмент кода создает, компилирует и подгоняет ее:

doodle_model = create_model((image_size, image_size, 1)) #image_size = 28
doodle_model.compile (optimizer = "Adam", loss = "categorical_crossentropy", metrics = ["accuracy"])
doodle_model.fit (x = X_train, y = Y_train, epochs = 4, batch_size = 256)

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

doodle_model.save("my_model.h5")

для сохранения модели

Однако, когда я попытался загрузить модель снова с помощью:

from keras.models import load_model
model = load_model ("my_model.h5")

, чтобы убедиться, что онасохранен правильно, я получаю следующую ошибку ...

KeyError                                  Traceback (most recent call last)
<ipython-input-61-6cde554a8add> in <module>()
      1 from keras.models import load_model
      2 
----> 3 model = load_model ("my_model.h5")

/usr/local/lib/python3.6/dist-packages/keras/models.py in load_model(filepath, custom_objects, compile)
    268             raise ValueError('No model found in config file.')
    269         model_config = json.loads(model_config.decode('utf-8'))
--> 270         model = model_from_config(model_config, custom_objects=custom_objects)
    271 
    272         # set weights

/usr/local/lib/python3.6/dist-packages/keras/models.py in model_from_config(config, custom_objects)
    345                         'Maybe you meant to use '
    346                         '`Sequential.from_config(config)`?')
--> 347     return layer_module.deserialize(config, custom_objects=custom_objects)
    348 
    349 

/usr/local/lib/python3.6/dist-packages/keras/layers/__init__.py in deserialize(config, custom_objects)
     53                                     module_objects=globs,
     54                                     custom_objects=custom_objects,
---> 55                                     printable_module_name='layer')

/usr/local/lib/python3.6/dist-packages/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    142                 return cls.from_config(config['config'],
    143                                        custom_objects=dict(list(_GLOBAL_CUSTOM_OBJECTS.items()) +
--> 144                                                            list(custom_objects.items())))
    145             with CustomObjectScope(custom_objects):
    146                 return cls.from_config(config['config'])

/usr/local/lib/python3.6/dist-packages/keras/models.py in from_config(cls, config, custom_objects)
   1404     @classmethod
   1405     def from_config(cls, config, custom_objects=None):
-> 1406         if 'class_name' not in config[0] or config[0]['class_name'] == 'Merge':
   1407             return cls.legacy_from_config(config)
   1408 

KeyError: 0

Насколько я знаю, KeyErrors связаны со словарями Python, но я не уверен, почему я сталкиваюсь здесь с KeyError.Любая помощь в том, почему я получаю эту ошибку и как ее можно исправить, будет принята с благодарностью.

Каждый фрагмент кода после строки

----> 3 model = load_model ("my_model.h5")

этого сообщения об ошибке является внутреннимКод Кераса и не написан мной.

Ответы [ 3 ]

0 голосов
/ 21 апреля 2019

Какую версию Keras вы используете?Если это 2.1.6, попробуйте Keras 2.2.4 или новее, и ваша проблема исчезнет.Это случилось со мной.

0 голосов
/ 09 августа 2019

Это из-за несоответствия версий keras. Проверьте версии перед продолжением.Создайте виртуальную среду со всеми совместимыми версиями.Попробуйте использовать keras 2.2.4

0 голосов
/ 24 октября 2018

Похоже, вы пытаетесь загрузить сохраненную модель, используя версию Keras, несовместимую с версией, которую вы использовали для сохранения модели.

Какие версии вы используете в каждом случае?Вы можете проверить, используя:

import keras
print(keras.__version__)

. Возможно, исправлением для вас будет обновление вашей версии Keras.

...