在Pycharm中导入某些包后,pycharm会报错Cannot find reference 'xxx' in __init__.py - Python / Pycharm。这个错误不会对程序运行产生影响,但是你将无法通过ctrl+左键跳转到被引用方法的源文件中,也无法查看该方法的文档。这主要是因为包撰写时导入不规范的原因,当然你也可以认为这是Pycharm的一个Bug。
import tensorflow as tf
import numpy as np
tf.enable_eager_execution()
x = tf.Variable(initial_value=3.)
with tf.GradientTape() as tape: # 在 tf.GradientTape() 的上下文内,所有计算步骤都会被记录以用于求导
y = tf.square(x)
y_grad = tape.gradient(y, x) # 计算y关于x的导数
print([y, y_grad])
上面的代码引用了tensorflow1.14,在Pycharm中tf.Variable / tf.GradientTape 和 tf.square 都会报错。为了在解除报错的同时能够顺利的通过ctrl+click进行跳转,我们不能直接通过修改Pycharm报错设置的方法消除高亮。
通用解决方案:
在报错的包下添加__all__ = [***,***,***],***为报错的包的名字,如
import tensorflow as tf
import numpy as np
__all__ = [tf]
tf.enable_eager_execution()
x = tf.Variable(initial_value=3.)
with tf.GradientTape() as tape: # 在 tf.GradientTape() 的上下文内,所有计算步骤都会被记录以用于求导
y = tf.square(x)
y_grad = tape.gradient(y, x) # 计算y关于x的导数
print([y, y_grad])
针对tensorflow2的解决方案:
第一种:这种方法适用于仅使用tensorflow.keras时,将
from tensorflow.keras import Model
import tensorflow as tf
tf.keras.optimizers.Adam()
替换成
from tensorflow_core.python.keras.models import Model
from tensorflow_core.python.keras.optimizers import Adam
Adam()
第二种:换用最新版的Pycharm,把tensorflow2.0降级至beta1