在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

 

 

参考:http://www.itkeyword.com/doc/0236821305700196164/cannot-find-reference-xxx-in-init-py-python-pycharmrq=1

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐