Ascii编码报错求助:无法编码字符u2581及TensorFlow栈追踪问题
解决TensorFlow NMT训练中的UnicodeEncodeError(ASCII无法编码u2581)
这个错误是因为Python 2.7默认用ASCII编码处理字符串,而你的训练数据或日志里出现了非ASCII字符▁(Unicode u2581,通常是分词工具添加的分隔符),直接触发了编码失败。下面是几个靠谱的解决办法:
全局强制Python用UTF-8编码
在你的训练入口文件(比如train.py或者nmt.py最开头)加上这几行代码:import sys reload(sys) sys.setdefaultencoding('utf-8')这会让Python 2.7默认使用UTF-8处理所有字符串,快速解决大部分编码问题。注意这只对Python 2有效,Python3里不需要这操作。
确认训练数据是UTF-8编码
检查你的源语言和目标语言训练文件,确保它们保存时用的是UTF-8编码(别用GBK、ASCII之类的)。用VS Code或者Notepad++打开文件,看右下角的编码标识,不对的话直接转换编码后重新保存。给NMT模型指定编码参数
在NMT的超参数(hparams)里明确设置编码格式,比如:hparams = tf.contrib.training.HParams( # 其他参数... src_encoding='utf-8', tgt_encoding='utf-8', )这样模型读取数据时会直接用UTF-8解析,避免编码不匹配。
手动处理输出/日志的编码
如果错误是在打印日志时触发的,那可以在print语句里手动指定编码:# 不要直接print(text) print(text.encode('utf-8'))另外也可以检查你的终端编码,Linux下执行
echo $LANG,确保输出是类似en_US.UTF-8,如果不是的话,可以临时设置:export LANG=en_US.UTF-8,让终端支持UTF-8字符显示。
内容的提问来源于stack exchange,提问作者Ole Martin T Vad
相关产品推荐
相关产品推荐

