在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘

时间:2024-04-13 18:09:33
欢迎大家关注笔者,你的关注是我持续更博的最大动力


原创文章,转载告知,盗版必究


在导入graphsurgeon时报错:ImportError: cannot import name 'NodeDef' from 'tensorflow'

文章目录:


先说明一下我自己的环境:

  • Ubuntu18.04
  • cuda10.2
  • cudnn7.6.5
  • TensorRT-7.0.0.11
  • uff0.6.5

1 错误原因分析

在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘

这个错误时由于:NodeDefTensorFlow1.x中是支持的,在TensorFlow2.x是不支持的,而我安装的tensorflow版本恰好是:tensorflow-gpu=2.2,因此导致这错误

2 解决方法

2.1 解决方法一(不推荐)

把tensorflow的版本降低(参考),降低到tensorflow1.x版本

把tensorflow的版本降到1.x版本,如下:

pip install tensorflow-gpu==1.4.0

之所以不推荐这种方法,是因为Tensorflow1.x版本太老,用 的也比较少,而且不一定满足你现在的项目需求

2.2 解决方法二(推荐)

1、修改_utils.py中的第二行代码,路径如下,大家根据自己的虚拟环境更改

/home/shl/anaconda3/envs/mmdetection/lib/python3.7/site-packages/graphsurgeon/_utils.py

把第二行的from tensorflow import NodeDef 更改为from tensorflow.compat.v1 import NodeDef

2、修改DynamicGraph.py中的第四行代码,路径如下,大家根据自己的虚拟环境更改

/home/shl/anaconda3/envs/mmdetection/lib/python3.7/site-packages/graphsurgeon/DynamicGraph.py

把四行的from tensorflow import GraphDef, NodeDef修改为from tensorflow.compat.v1 import GraphDef, NodeDef

把上面两处修改完之后,就可以成功导入graphsurgeon了:

在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘

注意:
tensorflow.compat是专门为了兼容某些tensorflow.1x版本和兼容某些tensorflow2.x版本的模块

  • tensorflow.compat.v1:兼容某些tensorflow.1x版本
  • tensorflow.compat.v2:兼容某些tensorflow.2x版本

所以,下载再遇到这种tensorflow版本问题,可以使用这个模块修改
在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘


在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘


在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘

在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘

在导入graphsurgeon时报错:ImportError: cannot import name ‘NodeDef‘ from ‘tensorflow‘
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠