"KeyError: 0" when trying to load a sequential model in Keras
"KeyError: 0" when trying to load a sequential model in Keras
我使用 Google Colab 在 Keras 中训练了一个序列模型来处理 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)
我使用这个模型获得了很好的结果,所以我决定保存它以便稍后在 Web 应用程序中部署它。我用过:
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")
这个报错是Keras的一些内部代码,不是我写的
听起来您可能正在尝试使用与您用于保存模型的版本不兼容的 Keras 版本加载已保存的模型。
您在每种情况下使用的是什么版本?您可以检查使用:
import keras
print(keras.__version__)
您的解决方法可能是升级您的 Keras 版本。
您使用的是什么 Keras 版本?如果是 2.1.6,那么尝试 Keras 2.2.4 或更新版本,您的问题就会消失。它发生在我身上。
这是因为 keras 版本 mismatch.Check 在继续之前的版本。使用所有兼容版本构建虚拟环境。尝试使用 keras 2.2.4
我使用 Google Colab 在 Keras 中训练了一个序列模型来处理 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)
我使用这个模型获得了很好的结果,所以我决定保存它以便稍后在 Web 应用程序中部署它。我用过:
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")
这个报错是Keras的一些内部代码,不是我写的
听起来您可能正在尝试使用与您用于保存模型的版本不兼容的 Keras 版本加载已保存的模型。
您在每种情况下使用的是什么版本?您可以检查使用:
import keras
print(keras.__version__)
您的解决方法可能是升级您的 Keras 版本。
您使用的是什么 Keras 版本?如果是 2.1.6,那么尝试 Keras 2.2.4 或更新版本,您的问题就会消失。它发生在我身上。
这是因为 keras 版本 mismatch.Check 在继续之前的版本。使用所有兼容版本构建虚拟环境。尝试使用 keras 2.2.4