Tensorflow常见错误

最近重新安装了Tensorflow的训练环境,并不是一帆风顺,比起PyTorch的安装,Tensorflow还是问题多多,比如字符编码、PyCocoTools等,在此记录下安装和使用过程中的常见问题,但并不对安装过程进行详细记录

无法加载Tensorflow

在使用GPU版本情况下,目前我直接pip安装之后,安装的是1.13.1版本,但是可能并没有去查询下1.13.1版本支持的CUDA版本,任意安装了最新的版本,结果导致简单验证 import tensorflow 报无法加载的问题,错误就不贴了,基本就是CUDA版本不对应的问题。后续查询了在1.13版本之前的几个版本支持的是CUDA 9,而1.13开始支持CUDA 10。因此按照对应关系去下载安装对应的CUDA版本即可,cuDNN下载页面有和CUDA对应的版本。

安装pycocotools

安装成功之后,随便跑一下训练,就会缺失一些库,一般pip安装即可,但是有些库在有些平台会有问题,比如下面的pycocotools在Windows平台就不能直接安装,需要单独的安装方式,首先必须安装VC 2015 编译器,其次不能使用官方的代码,因此还需要确保系统安装了git工具,一切就绪后就可以使用下面的命令安装了

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

如果你本机没有VC,且不想安装巨大的IDE,可以考虑安装编译器即可,下载 https://go.microsoft.com/fwlink/?LinkId=691126 安装纯编译器即可。

UnicodeDecodeError

在上面的pycocotools的安装过程中,可能会遇到类似下面的错误

Traceback (most recent call last):
File "...site-packages\pip\compat\__init__.py", line 73, in console_to_str
return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 42: invalid start byte

这其实是文件字符集和控制台的字符集转换导致的问题,因为Windows上的控制台字符集一般都是936,也就是GBK,因此需要修改Python目录下的 Lib/site-packages/pip/compat/__init__.py 大概在75行,将 utf-8 修改为 gbk 即可,类似

if sys.version_info >= (3,):
def console_to_str(s):
try:
return s.decode(sys.__stdout__.encoding)
except UnicodeDecodeError:
return s.decode('gbk')

def native_str(s, replace=False):
if isinstance(s, bytes):
return s.decode('utf-8', 'replace' if replace else 'strict')
return s

can’t pickle dict_values objects

在训练 object detection 的预训练模型的时候,可能会产生下面的报错

Invalid argument: TypeError: can't pickle dict_values objects
Traceback (most recent call last):

...

File "object_detection\metrics\coco_tools.py", line 118, in LoadAnnotations
results.dataset['categories'] = copy.deepcopy(self.dataset['categories'])

File "C:\Program Files\Python36\lib\copy.py", line 169, in deepcopy
rv = reductor(4)

TypeError: can't pickle dict_values objects

按照提示将 object_detection\metrics\coco_tools.py 的118行加上 list 即可,如下

results.dataset['categories'] = copy.deepcopy(list(self.dataset['categories']))

Failed to create a directory

训练时报错,最后打印的错误日志如下

tensorflow.python.framework.errors_impl.NotFoundError: Failed to create a directory: 
./train\export\Servo\temp-b'1557132706'; No such file or directory

应该是无法创建目录的问题,修改Tensorflow安装目录下的 tensorflow\python\saved_model\builder_impl.py 中,将原来的代码

file_io.recursive_create_dir(self._export_dir)

替换为下面的代码

os.makedirs(compat.as_str(self._export_dir), exist_ok=True)

应该有两处。

最近的文章

部署AppRTC服务

AppRTC是WebRTC视频通话的服务程序,一般可以将其作为参考实现,搭建AppRTC服务受限于很多条件,并不是太容易。在参考了官方操作和大量的博客之后,根据自己操作实践排除了很多网络博客上的错误方法,终于部署成功了一套环境。测试环境为阿里云的CentOS 7服务器,带公网IP和域名。 部署前的必 …

技术 继续阅读
更早的文章

Modbus协议规范

MODBUS协议目前最常用的是Modbus RTU和Modbus TCP,分别对应串口和网络。二者核心是相同的,仅封包格式略有区别。以下以Modbus RTU 和 Modbus TCP为例总结。 协议中所有的16bit及以上数值均按大端字节序存储 通用帧定义本节主要讲的是Modbus RTU和M …

技术 继续阅读