Keras带命名层模型保存加载报错:AttributeError解决方法
Keras模型保存与加载报错:AttributeError: 'str' object has no attribute 'decode'
我构建了一个各层均指定名称的Keras模型,代码如下:
def build_model(): input_layer = keras.Input(shape=input_shape, name='input') conv1 = layers.Conv2D(32, kernel_size=(3, 3), activation="relu", name='conv1')(input_layer) maxpool1 = layers.MaxPooling2D(pool_size=(2, 2), name='maxpool1')(conv1) conv2 = layers.Conv2D(64, kernel_size=(3, 3), activation="relu", name='conv2')(maxpool1) maxpool2 = layers.MaxPooling2D(pool_size=(2, 2), name='maxpool2')(conv2) flatten = layers.Flatten(name='flatten')(maxpool2) dropout = layers.Dropout(0.5, name='dropout')(flatten) dense = layers.Dense(num_classes, activation="softmax", name='dense')(dropout) return keras.Model(inputs=(input_layer,), outputs=(dense,)) model = build_model() model.compile(...) model.fit(...)
我希望完整保存该模型以便后续加载,保存加载代码如下:
model.save('path/model.h5') new_model = tf.keras.models.load_model('path/model.h5')
但加载时出现如下错误:
>>> model = keras.models.load_model('model.h5') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/username/anaconda3/envs/enviromentname/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/save.py", line 146, in load_model return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile) File "/Users/username/anaconda3/envs/enviromentname/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/hdf5_format.py", line 166, in load_model_from_hdf5 model_config = json.loads(model_config.decode('utf-8')) AttributeError: 'str' object has no attribute 'decode'
我尝试仅保存权重,仍出现相同错误:
>>> model.save_weights('path/model_weights.h5') >>> model.load_weights('path/model_weights.h5') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/username/anaconda3/envs/enviromentname/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 181, in load_weights return super(Model, self).load_weights(filepath, by_name) File "/Users/username/anaconda3/envs/enviromentname/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/network.py", line 1177, in load_weights saving.load_weights_from_hdf5_group(f, self.layers) File "/Users/username/anaconda3/envs/enviromentname/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/hdf5_format.py", line 651, in load_weights_from_hdf5_group original_keras_version = f.attrs['keras_version'].decode('utf8') AttributeError: 'str' object has no attribute 'decode'
参考相关问题尝试降级h5py,但错误仍存在。该如何解决?
编辑: 按照建议,重新确认h5py的降级操作,并确保Google Colab与本地机器的Keras版本一致,使用h5py 2.10.0版本后问题解决。
内容的提问来源于stack exchange,提问作者Alessandro
相关产品推荐
相关产品推荐

