AttributeError:'Tensor'对象没有属性'numpy'
- 2025-03-05 09:16:00
- admin 原创
- 94
问题描述:
我从 GitHub 下载了此代码。
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].numpy()
但我收到一条错误消息:
AttributeError: 'Tensor' object has no attribute 'numpy'
哪里出了问题?我该如何修复?
解决方案 1:
由于接受的答案没有为我解决问题,所以我认为它可能对一些面临此问题并且已经拥有 tensorflow 版本 >= 2.2.0 和启用了 Eager Execution 的人有所帮助。
问题似乎是,对于安装期间的某些功能,装饰model.fit()
器出于性能原因@tf.function
禁止执行这些功能tensor.numpy()
。
对我来说,解决方案是将标志传递run_eagerly=True
给model.compile()
如下内容:
model.compile(..., run_eagerly=True)
解决方案 2:
我怀疑您复制代码的地方已经启用了紧急执行tf.enable_eager_execution()
,即在程序启动时调用了它。
你也可以这么做。
更新:请注意,TensorFlow 2.0 默认启用 Eager Execution。因此,上述答案仅适用于 TensorFlow 1.x
解决方案 3:
Tensorflow 2 有一个配置选项可以“立即”运行函数,这将允许通过.numpy()
方法获取 Tensor 值。要启用立即执行,请使用以下命令:
tf.config.run_functions_eagerly(True)
请注意,这主要用于调试。
另请参阅:https://www.tensorflow.org/api_docs/python/tf/config/run_functions_eagerly
解决方案 4:
如果您的代码包装在 @tf.function 中或 Keras 层内,TF2.0 中也可能发生这种情况。这两者都以图形模式运行。由于 Eager 模式和图形模式之间的行为不同,并且人们不知道他们正在切换上下文,因此存在大量隐藏的代码,因此请小心!
解决方案 5:
这种情况发生在旧版本的 TF 中。因此请尝试pip install tensorflow --upgrade
否则运行
import tensorflow as tf
tf.enable_eager_execution()
如果您正在使用 Jupyter 笔记本,请重新启动内核。
解决方案 6:
您还可以使用它tf.get_static_value()
来获取张量的值。这样做的好处是不需要急切模式。请参阅此处的文档。
解决方案 7:
tf.multinomial
返回一个 Tensor 对象,该对象包含一个 2D 列表,其中包含形状为 的绘制样本[batch_size, num_samples]
。调用.eval()
该张量对象预计会返回一个 numpy ndarray。
像这样:
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].eval()
您还需要确保您有一个活动的会话(否则没有多大意义):
sess = tf.Session()
with sess.as_default():
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].eval()
解决方案 8:
我在 tf.function() 中遇到了同样的问题:但对我有用的方法是通过 tf.convert_to_tensor
Doku将 numpy 数组转换为 tensorflow 张量,然后继续使用 tensorflow。也许这个技巧对任何人都有用...
解决方案 9:
当我运行类似以下代码时,我看到了类似的错误,
tensor = tf.multiply(ndarray, 42)
tensor.numpy() # throw AttributeError: 'Tensor' object has no attribute 'numpy'
我使用带有 tensorflow 1.14.0 的 anaconda 3。我使用以下命令升级了 tensorflow
conda update tensorflow
现在 tensorflow 是 2.0.0,问题已修复。尝试一下看看它是否能解决您的问题。
扫码咨询,免费领取项目管理大礼包!