1.问题:
在吴恩达第四课第三周作业 利用YOLO算法实现Detection中,需要导入预先训练好的模型,此时用到keras中的函数load_model(),运行时报出以下错误:
File "D:/Program Files/Anaconda3/envs/Tensorflow/Lib/site-packages/keras/utils/generic_utils.py", line 224, in func_load
raw_code = codecs.decode(code.encode('ascii'), 'base64')
UnicodeEncodeError: 'ascii' codec can't encode character '\xe3' in position 0: ordinal not in range(128)
2.原因:
由于出现此问题前,博主曾在本地运行过该程序,未出现此问题,之后重新安装过keras,因此初步认定为keras版本导致此问题出现。
通过查看本地generic_utils.py 中的func_load()函数及GitHub-Keras/utlis/generic_utils.py
中对应函数,发现存在差异:
本地:
if closure is not None:
closure = tuple(ensure_value_to_cell(_) for _ in closure)
raw_code = codecs.decode(code.encode('ascii'), 'base64')
code = marshal.loads(raw_code)
GitHub:
if closure is not None:
closure = tuple(ensure_value_to_cell(_) for _ in closure)
try:
raw_code = codecs.decode(code.encode('ascii'), 'base64')
except (UnicodeEncodeError, binascii.Error):
# backwards compatibility for models serialized prior to 2.1.2
raw_code = code.encode('raw_unicode_escape')
code = marshal.loads(raw_code)
3.解决方法
更改代码并在文件头加入
import binascii
问题解决。