作为一个刚入TF的小白,经常碰到很多报错关于AttributeError: module ‘tensorflow‘ has no attribute ‘**‘等,百度上搜出来好多答案都是升级,或者重装TF,我就想说这辈子都不想再重装环境了。所以就仔细研究了下,记录一下。
【环境版本】:TF:1.7
PY:3.5.3
【问题复现】:在调用 tf.GradientTape() 时在tf下没有显示GradientTape的类,报错如图:
【问题思考】:以我一个小白的经验,第一反应是看看这个类的声明在哪,结果发现go to不到,上网搜了下这个类的定义发现是在下面目录下的backprop.py里,我也确实在本地文件里找到了定义,但为什么会找不到,可能是路径设置有问题?
tensorflow-gpu是我本地在用的环境名称
【解决办法】:
于是我把定义类的路径引入到调用的函数,如图:
然后在调用的地方改了下,直接引用发现编译器没有报错,运行也可以解决,其他类似的问题应该按照这个思路都能解决
【思考】:
以后如果还是要调用,每次都要重新设置路径比较麻烦,于是思考能不能可以直接通过tf直接访问呢?于是我找到eager的上一级目录python下的__init__文件,看看是不是没有导入eager\backprop的GradientTape类,发现确实没有,于是我仿照eager.context导入executing_eagerly的方式,在全页搜索了下executing_eagerly的用法有两个地方,照猫画虎加上了GradientTape。
然后回到调用的地方,去掉了
,
然后在调用时发现tf.下可以索引到GradientTape,于是恢复了之前的调用方法,完美运行,问题解决。这次是类的地址设置问题,还有可能是库的地址设置,思路是一样的,不过是要先在tensorflow文件内找找有没有这个库,再进行地址设置的修改。
关于AttributeError: module 'tensorflow' has no attribute '**'报错问题的解决,以GradientTape为例
原文:https://www.cnblogs.com/chulan-lxc/p/14528507.html