Keras模型保存后加载报错:AttributeError: 'str'对象无'decode'属性
解决Keras加载模型时的AttributeError: 'str' object has no attribute 'decode'错误
问题原因
你的代码存在几个关键问题,结合环境版本兼容问题引发了该错误:
- 保存模型时使用的文件名是
model_test.h5,但加载时只写了model_test,缺少文件后缀导致路径匹配失败。 - 混用了原生Keras和TensorFlow Keras的API:用原生Keras的
model.save()保存,却用tf.keras.models.load_model()加载,部分版本下两者不兼容。 - 旧版本h5py在Python 3环境下会错误地对字符串调用
decode()方法(这是Python 2的语法),触发该异常。
修复方案
1. 修正文件名匹配
加载模型时使用完整的文件名,同时保持导入的load_model与保存时的API一致:
from keras.models import load_model # 加载时使用完整的.h5文件名 new_model = load_model("model_test.h5")
2. 统一使用TensorFlow Keras API
如果你的环境依赖TensorFlow,建议全程使用tf.keras的API,避免混用:
# 替换所有导入为tf.keras import numpy as np import pandas as pd from tensorflow.keras.utils import to_categorical from tensorflow.keras.preprocessing.sequence import pad_sequences from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, GRU, Embedding from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint from tensorflow.keras.models import load_model # 模型构建、编译、训练逻辑不变 model.save("model_test.h5") # 用tf.keras的load_model加载 new_model = load_model("model_test.h5")
3. 更新h5py版本
如果上述方法无效,执行以下命令更新h5py,解决Python 3下的字符串处理兼容问题:
pip install --upgrade h5py
验证
完成上述操作后重新运行加载代码,若仍有问题,检查Python版本(推荐3.8+)和TensorFlow/Keras版本是否匹配(如TensorFlow 2.x对应Keras 2.x)。
内容的提问来源于stack exchange,提问作者mynameisbram
相关产品推荐
相关产品推荐

