Skip to main content
 首页 » 编程设计

python之PyCharm TensorFlow 警告之类型 'Variable' 没有预期的属性 '__sub__'

2024年09月07日2752php

从 TensorFlow GitHub repository 复制 retrain.py 后

然后在 PyCharm 中打开它,在第 794 和 802 行 PyCharm 显示以下警告:

Type 'Variable' doesn't have expected attribute '__sub__' 

如果有帮助,这里是截图:

谁能解释一下:

  1. 这是什么意思?

  2. 如何解决这个问题或抑制警告?

显然 PyCharm 认为 layer_weights 没有属性 "__sub__",但这意味着什么以及为什么 __sub__ 属性是必要的?函数 variable_summaries() 不引用属性 __sub__(从第 735 行开始复制/粘贴):

def variable_summaries(var): 
    """Attach a lot of summaries to a Tensor (for TensorBoard visualization).""" 
    with tf.name_scope('summaries'): 
        mean = tf.reduce_mean(var) 
        tf.summary.scalar('mean', mean) 
        with tf.name_scope('stddev'): 
            stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean))) 
        tf.summary.scalar('stddev', stddev) 
        tf.summary.scalar('max', tf.reduce_max(var)) 
        tf.summary.scalar('min', tf.reduce_min(var)) 
        tf.summary.histogram('histogram', var) 
# end of function 

有人可以解释为什么属性 __sub__ 是必需的吗?

看完this帖子,我的印象是可以添加一条评论来抑制这个警告,可能是这样的:

@type whatGoesHere: ?? 
@attribute __sub__: comment here??    # is this correct? 
@param whatGoesHere: ?? 

这样的事情可行吗,评论应该是什么?

我不想禁用 PyCharm 的警告,因为我发现它们在很多情况下都很有用。有人可以提供一些关于上述内容的启示,以避免在 PyCharm 中禁用此警告吗?

- 编辑:

谢谢舒的解释。目前,这似乎是在 PyCharm 中处理此问题而不完全禁用该检查的最佳方法:

# this comment is necessary to suppress an unnecessary PyCharm warning 
# noinspection PyTypeChecker 
variable_summaries(layer_weights) 

如果最终有人能告诉我更好的选择,那就太好了。

请您参考如下方法:

- 运算符在 variable_summaries 内的 var 上调用:

stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))

通常 Python 会在计算表达式 var - mean 时寻找 var 的 __sub__ 方法。但是,tf.Variable 实例包裹在 state_ops.variable_op_v2 中以支持 GPU/CPU 上的 Ops,并且没有 __sub__ 方法Python 通常会期望的。

因此,此警告是 TensorFlow 在 Tensorflow 对象上大量自定义标准 Python 运算符的方式所固有的,以便在使用 Tensorflow OP 启用 GPU/CPU 计算时支持我们习惯的表达式。

我想说你可以安全地忽略任何 Tensorflow 对象上的这个警告。不幸的是,我不知道如何在 PyCharm 中抑制此警告。