执行ISR时出现AttributeError: 'str'对象无decode属性报错如何解决
问题原因
该报错由h5py包版本与你使用的旧版TensorFlow/Keras版本不兼容导致:
h5py3.0及以上版本读取HDF5文件中的字符串属性时,会直接返回Python原生字符串类型,无需调用decode方法解码- 你当前使用的TensorFlow 1.x版本内置的Keras权重加载逻辑仍保留了Python 2时期的写法,对读取到的属性值强制调用
decode('utf8'),因此触发str对象无decode方法的报错
解决方案
按优先级从高到低选择即可:
- 方案一:降级
h5py到兼容旧版TensorFlow的版本
直接执行安装命令:
安装完成后重启运行环境即可正常加载ISR的预训练权重,无需调整其他代码。pip install h5py==2.10.0 - 方案二:手动修改TensorFlow源码适配新版
h5py
找到报错文件/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/keras/saving/hdf5_format.py,将第651行的代码:
修改为:original_keras_version = f.attrs['keras_version'].decode('utf8')
后续如果遇到其他同类original_keras_version = f.attrs['keras_version']decode报错,也用相同逻辑修改对应行即可。 - 方案三:升级TensorFlow到2.4及以上版本
新版TensorFlow已经适配了h5py3.x的特性,不存在该报错,升级前需确认ISR库与新版TensorFlow的兼容性,避免出现其他API不兼容问题。
内容的提问来源于stack exchange,提问作者Wout Vromans
相关产品推荐
相关产品推荐

