Keras模型权重保存出现UTF-8编码错误的解决方法
解决Keras保存权重时的UTF-8编码错误问题
兄弟,你这里其实是两个小问题导致的困惑,咱们一步步来搞定:
1. 核心错误:搞反了权重的保存与加载方法
你现在写的代码是model.load_weights(fname)——这是加载已保存权重的方法,而不是保存!要把训练好的模型权重写入文件,你需要用model.save_weights(fname),这才是正确的保存操作。
修正后的保存代码应该是这样:
# 训练完成后执行保存操作 fname = "weights-Test-CNN.hdf5" model.save_weights(fname) # 注意是save_weights,不是load_weights! # 后续需要加载权重时,再用load_weights # model.load_weights(fname)
2. 关于UTF-8编码错误的解释
你用文本编辑器打开hdf5文件时出现的编码错误是完全正常的,因为hdf5是二进制格式的文件,不是UTF-8编码的纯文本。这类文件专门用于存储大型数值数据(比如神经网络权重),不能用普通文本编辑器(如记事本、VS Code默认文本模式)直接打开查看内容。
如果要验证权重是否正确保存,你可以通过以下方式:
- 用
model.load_weights(fname)加载权重文件,然后用模型进行预测或者打印模型参数,确认功能正常; - 用HDF5专用的查看工具来查看文件结构;
- 用Python的
h5py库读取文件内容,示例代码如下:import h5py with h5py.File(fname, 'r') as f: # 查看文件内的权重组 print("文件内的权重组:", list(f.keys())) # 查看每组权重的形状 for group_name in f.keys(): print(f"{group_name} 的形状:", f[group_name].shape)
按上面的步骤修正后,就能正确保存权重,也能理解为什么打开文件会出现编码错误啦。
内容的提问来源于stack exchange,提问作者Palash Shah
相关产品推荐
相关产品推荐

