UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd5 in position 337: invalid continuation byte

Tensorflow: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 337: invalid continuation byte

⚡插播一条老家自产的糖心苹果,多个品种,欢迎选购!有问题随时私信我⚡:🍎🍎来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果,欢迎选购!!🍎🍎
在这里插入图片描述

大凉山高原生态糖心苹果

1.软件环境⚙️

Windows10 教育版64位
Python 3.6.3
Tensorflow-GPU 2.5.0
Keras 2.4.3
CUDA 10.1
sacred 0.8.3

2.问题描述🔍

今天在使用Tensorflow对不同的数据集进行训练时,忽然发现只是修改了数据集的路径,其他的什么也没有改,但是就一直报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 337: invalid continuation byte

即:

Traceback (most recent calls WITHOUT Sacred internals):
  File "E:/Code/Python/tensorflow2.5.0/Classification model evaluation/model_training_sacred.py", line 239, in main
    history = train()
  File "E:/Code/Python/tensorflow2.5.0/Classification model evaluation/model_training_sacred.py", line 224, in train
    class_weight=class_weight)
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1188, in fit
    callbacks.on_train_batch_end(end_step, logs)
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\callbacks.py", line 457, in on_train_batch_end
    self._call_batch_hook(ModeKeys.TRAIN, 'end', batch, logs=logs)
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\callbacks.py", line 317, in _call_batch_hook
    self._call_batch_end_hook(mode, batch, logs)
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\callbacks.py", line 337, in _call_batch_end_hook
    self._call_batch_hook_helper(hook_name, batch, logs)
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\callbacks.py", line 375, in _call_batch_hook_helper
    hook(batch, logs)
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\callbacks.py", line 2426, in on_train_batch_end
    self._stop_trace()
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\callbacks.py", line 2457, in _stop_trace
    self._stop_profiler()
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\keras\callbacks.py", line 2564, in _stop_profiler
    profiler.stop(save=save)
  File "C:\Users\Anaconda3\envs\tf2.5\lib\site-packages\tensorflow\python\profiler\profiler_v2.py", line 154, in stop
    _profiler.export_to_tb()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 337: invalid continuation byte

这我就改了路径啊?而且之前改路径一点都没有问题,难道是数据集的问题?
在这里插入图片描述

3.解决方法🐡

首先,只要路径改回原来的,就不会报错了,那么就可以确定大概率是路径的问题;
再仔细看看接下来的代码有哪些地方使用了该路径:
发现是callback里面的ModelCheckpointTensorboard使用了该路径,由于模型都还没有生成就报错了,那么肯定不会是ModelCheckpoint的锅,排除!
再通过仔细查看日志,看到主要是profiler_v2.py这个文件报错,咦,profiler这个单词有监视器,分析器的意思:
在这里插入图片描述
监视器,分析器?那不就是Tensorboard吗?
综合上面的原因,Tensorboard有严重的犯罪嫌疑!
然后再返回来看报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 337: invalid continuation byte

报错主要还是编解码的问题,再看到我自己的路径里面有中文:

model_and_log_path= 'class_weight+img_aug+mixup训练国产分类模型+从俄罗斯红树林抽取少部分红树林,非国产数量远大于国产+按训练集类别比例构造验证集+Xception'

那么八九不离十就是Tensorboard中因为中文路径带来的问题了,因此数据集的路径不变,尝试将:

TensorBoard(log_dir=os.path.join(model_and_log_path, TIME_STAMP), histogram_freq=1, write_grads=True)

单独修改为不带中文的路径,以便Tensorboard生成的log日志能顺利保存:

TensorBoard(log_dir=os.path.join(r'E:\Code\Python\tensorflow2.5.0\Classification model evaluation\model_and_log\test', TIME_STAMP), histogram_freq=1, write_grads=True)

这样的话,应该就没有问题了吧?

4.结果预览🤔

事实也确实如我们所料,训练不报错了,正常运行:
在这里插入图片描述

5.后记

通过对比正常训练和报错的log日志文件,发现报错的log日志只有1个文件,正常训练的却7个文件,足足多了6个文件,应该就是在保存这些文件的时候出错了:
在这里插入图片描述
其实Tensorboard是支持中文路径的,因此之前也是中文路径也是能正常训练的,但如果是中文路径而且文件夹文字又很长的话,还是可能会有BUG出现,因此以后还是用英文当路径吧!
这篇文章主要还是讲Debug的思路,具体问题不重要,重要的是遇到问题,怎么分析,怎么解决,我觉得这个能力可能比问题本身更重要!

渣男!都看到这里了,还不赶紧点赞评论收藏走一波?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任博啥时候能毕业?

有用的话,请博主喝杯咖啡吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值