新手踩坑 tensorflow 上运行模型

1、rom ._ellip_harm_2 import _ellipsoid, _ellipsoid_norm ImportError: cannot import name ‘_ellipsoid’
Python 中可能会遇到 cannot import name ‘XXX’ 错误, 其实这有可能出现再模块导入的顺序问题上, 比如:在 A 文件头执行到语句 from B import XXX ,程序马上就会转到 B 文件中去,从头到尾顺序寻找 B 文件中的 XXX 函数,而 A 文件就暂停执行,直到把 XXX 函数复制到内存中,但 B 文件中的文件头可能也有导入, 如果 B 文件头中又导入了 A 文件中的函数,由于 XXX 函数还没有被复制。所以于 A 文件因为暂停执行而无法导入,就会出现上面的错误了。

2、libstdc++.so.6: version `CXXABI_1.3.9’ not found (required by… )
ibstdc++.so.6 在系统中存在于 /usr/lib/libstdc++.so.6 或者 /usr/lib/x86_64-linux-gnu/libstdc++.so.6。导致这个问题的出现可能是你在别的库中(例如 anaconda)也存在该动态库文件。
1、查看
strings /usr/lib/libstdc++.so.6 | grep ‘CXXABI’
或者

   strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep 'CXXABI'

   有 CXXABI_1.3.9 这一项,而同样的方式查看 anaconda3/lib/ 下 libstdc++.so.6 文件
   strings anaconda3/lib/libstdc++.so.6 | grep 'CXXABI'

   最高才存在 CXXABI_1.3.7
   2、复制动态库

   # 删除原来的 libstdc++.so.6
  sudo rm -rf anaconda3/lib/libstdc++.so.6
  # 拷贝新的动态库文件,注意自己的是哪个版本
   sudo cp /usr/lib/libstdc++.so.6.0.21 /home/ubuntu/anaconda3/lib/

   3、建立软连接
  cd anaconda3/lib/
  sudo chmod +r libstdc++.so.6.0.21
   sudo ln -sf libstdc++.so.6.0.21 libstdc++.so.6

    sudo ldconfig

3、在 tensorflow model API 中,IndexError: list index out of range

  在 config 文件中出现这种错误,是因为输入参数的时候没有输入全。

4、
protobuf 转换 python 代码时发生 Expected “required”, “optional”, or “repeated”.错误解决方法\Google Protocol Buffers 简称 Protobuf,它提供了一种灵活、高效、自动序列化结构数据的机制,可以联想 XML,但是比 XML 更小、更快、更简单。仅需要自定义一次你所需的数据格式,然后用户就可以使用 Protobuf 编译器自动生成各种语言的源码,方便的读写用户自定义的格式化的数据。与语言无关,与平台无关,还可以在不破坏原数据格式的基础上,依据老的数据格式,更新现有的数据格式。在很多谷歌开源的程序中都大部分用到了 protobuf,比如最新开源出来的 object_detection 中就存在这样的定义。最近想着编译一下这个目标检测识别的程序,发现 protobuf 居然报了个错误,错误码即如下:
.proto:386:3: Expected “required”, “optional”, or “repeated”.
针对这个问题,才发现自己电脑上的 protobuf 版本是 2.5 版本 (通过命令:protoc --version 进行查看),可能原因还是新版本又更新了一些参数,查看了下需求,也发现需要用到 2.6 版本,所以只能重新进行编译 protobuf.高的版本。于是从 https://github.com/google/protobuf/releases?after=v2.6.1 下载 2.6 的数据包。直接按照传统的 ./configure, make -j4 , sudo make install 等方式来进行安装。这时候还需要一个步骤,需要在 /etc/profile 中配置一下参数:
export LD_LIBRARY_PATH=/usr/local/lib
不然就会报如下错误:
protoc: error while loading shared libraries: libprotoc.so.9: cannot open shared object file: No such file or directory
完成安装后,再重新进行进行代码转换,即可成功。
protoc ./object_detection/protos/*.proto --python_out=.
dscbigdata-Lenovo-Product:~/work/tensorflow/models-master$
这时候,对应的 python 文件已经生成


TF_master 2018-8-31 14:39:18