尽管默认情况下在 TF 2.0 中启用了 Eager_execution,但我在使用 .numpy() 时遇到错误
请注意,我没有在与 TF 1.0 兼容的模式下使用代码。
expt = [[[ 0, 0, 0],
[ 4, 71, 141],
[ 0, 0, 0]],
[[ 83, 25, 85],
[ 90, 190, 143],
[ 4, 141, 49]],
[[ 0, 0, 0],
[ 4, 71, 49],
[ 0, 0, 0]]]
expt = tf.convert_to_tensor(expt)
预期值 = expt.numpy()
AttributeError: 'Tensor' 对象没有属性 'numpy'
TensorFlow 2.0 的 CPU 测试版。
@ Mainak431你的问题解决了吗?
是的。
你的解决方案是什么?
.Numpy 仅在 Eager 模式下受支持。 如果您处于图形模式,则不支持。 检查,如果您处于急切模式。 做,tf.eagerly()。 它返回真或假。 在图形模式下,您必须在会话中使用 eval 来获取 numpy 数组中张量的值。
@Mainak431
模块 'tensorflow' 没有属性 'eagerly'
模块 'tensorflow.compat.v1' 没有属性 'eagerly'
我正在使用包 tensorflow-gpu==2.0.0-alpha0
我的一个张量上的 .numpy() 产生 'Tensor' 对象没有属性 'numpy'
tf.eagerly() 给出模块“tensorflow”没有属性“eagerly”
tf.executing_eagerly() 而不是 tf.eagerly() 为我工作以检查我是否处于急切模式
有没有人为此找到解决方案?
同样的问题……我在 Eager 模式下调用了一个 keras 模型,我得到了一个张量,而不是一个 EagerTensor,这会导致 OpenAI Gym 出现问题
运行这个 tf.enable_eager_execution() 然后当你尝试 tf.executing_eagerly() 它应该给 True。 在此之后,您可以使用 something.numpy() 查看值。
@AkashNagaraj我刚刚提交了一个问题,其中代码正在急切地执行(并且应该,因为它是 TF 2.0),但是我遇到了“缺少 numpy”的问题。 你愿意看一看吗? https://github.com/tensorflow/tensorflow/issues/32842
谢谢!
我遇到过同样的问题。 原来我试图在@tf.function 中使用 .numpy()。 据我了解 tf.function 并不是出于性能目的而急切地执行。 如果我删除 @tf.function 装饰器 .numpy() 工作。
我遇到过同样的问题。 原来我试图在@tf.function 中使用 .numpy()。 据我了解 tf.function 并不是出于性能目的而急切地执行。 如果我删除 @tf.function 装饰器 .numpy() 工作。
这对我有用,@tf.function 将整个函数变成了图形模式
为什么这个线程中没有提到一个解决方案=.=
我的函数没有装饰器,但 .numpy() 仍然像以前的海报所描述的那样失败。 有没有人找到解决方案?
我发现在我的脚本顶部插入 tf.compat.v1.enable_eager_execution() 后我的问题就解决了(与以前的海报所说的非常相似,但这适用于 TF 2.0)...
我遇到了同样的问题,上述解决方案都不适用于我。
我使用的是 TF 2.0,我的函数没有装饰器,tf.eagerly() 返回 True 并且我仍然得到相同的 AttributeError: 'Tensor' object has no attribute 'numpy'。
同样的问题。
我确保我正在急切地执行并且在我的自定义损失函数上没有装饰器。 我还尝试了迈克尔的解决方案两个评论,但没有用。
我收到错误:AttributeError: 'Tensor' object has no attribute 'numpy'
我注意到只有在模型拟合期间尝试将张量转换为 numpy 时才会出现此错误。 我最好的猜测是它似乎是形状问题。
例如,下面的张量
tf.Tensor([[1 3] [0 4]], shape=(2, 2), dtype=int64)
可以使用 .numpy() 进行转换。 但是,当尝试为分类问题实现自定义指标时,y_true.numpy() 和 y_pred.numpy() 都会引发
AttributeError: 'Tensor' 对象没有属性 'numpy'。
这是两个 y 的一个示例:
y_true:
打印(y_true):张量(“密集目标:0 ”,形状=(无,无,无),dtype=float32)
打印(类型(y_true)):
y_pred:
打印(y_pred):张量(“密集/身份:0 ”,形状=(无,无,6),dtype=float32)
打印(类型(预测)):
@renatomello我和你有同样的问题。 我打开了一个新问题:#35393。
@renatomello尝试实施自定义指标时问题仍然存在。 你找到解决方法了吗?
@renatomello尝试实施自定义指标时问题仍然存在。 你找到解决方法了吗?
不,我没有。 我想看看是否有一个 TF/Keras 后端功能可以做类似的事情,我可以使用。 否则,我只需要自己创建一个。
我在数据预处理中使用正则表达式函数时遇到了这个领域。 使用 python 逻辑需要使用tf.py_function
中提到的文档和这个StackOverflow 线程(注意tf.py_func()
现在是tf.py_function()
)
一旦我改变了我的代码data = fnames.map(process_path)
到data = fnames.map(lambda x: tf.py_function(process_path, [x], [tf.string]))
代码正确执行。
我在 TF2.1 中使用非常自定义的split
尝试TextVectorization
层时遇到了这个问题。 对我来说修复它的是将dynamic=True
传递给TextVectorization
构造。
我注意到只有在模型拟合期间尝试将张量转换为 numpy 时才会出现此错误。 我最好的猜测是它似乎是形状问题。
例如,下面的张量
tf.Tensor([[1 3] [0 4]], shape=(2, 2), dtype=int64)
可以使用 .numpy() 进行转换。 但是,当尝试为分类问题实现自定义指标时,y_true.numpy() 和 y_pred.numpy() 都会引发
AttributeError: 'Tensor' 对象没有属性 'numpy'。
这是两个 y 的一个示例:
y_true:
打印(y_true):张量(“密集目标:0 ”,形状=(无,无,无),dtype=float32)
打印(类型(y_true)):y_pred:
打印(y_pred):张量(“密集/身份:0 ”,形状=(无,无,6),dtype=float32)
打印(类型(预测)):
不知道原因,但我通过添加解决了这个问题experimental_run_tf_function=False
在我的模型的编译功能中。
我注意到只有在模型拟合期间尝试将张量转换为 numpy 时才会出现此错误。 我最好的猜测是它似乎是形状问题。
例如,下面的张量
tf.Tensor([[1 3] [0 4]], shape=(2, 2), dtype=int64)
可以使用 .numpy() 进行转换。 但是,当尝试为分类问题实现自定义指标时,y_true.numpy() 和 y_pred.numpy() 都会引发
AttributeError: 'Tensor' 对象没有属性 'numpy'。
这是两个 y 的一个示例:
y_true:
打印(y_true):张量(“密集目标:0 ”,形状=(无,无,无),dtype=float32)
打印(类型(y_true)):
y_pred:
打印(y_pred):张量(“密集/身份:0 ”,形状=(无,无,6),dtype=float32)
打印(类型(预测)):不知道原因,但我通过添加解决了这个问题
experimental_run_tf_function=False
在我的模型的编译功能中。
在我的情况下似乎没有什么不同
我在 TF2.1 中使用非常自定义的
split
尝试TextVectorization
层时遇到了这个问题。 对我来说修复它的是将dynamic=True
传递给TextVectorization
构造。
你是怎么做到的?
首先,您应该按如下方式注册会话:
sess=tf.Session()
然后..使用:
预期值 = expt.eval(session=sess)
结果应该是:
打印(预期值)
出[41]:
数组([[[ 0, 0, 0],
[ 4, 71, 141],
[ 0, 0, 0]]])
感谢
我在 TF2.1 中使用非常自定义的
split
尝试TextVectorization
层时遇到了这个问题。 对我来说修复它的是将dynamic=True
传递给TextVectorization
构造。你是怎么做到的?
像这样。 总的来说,我仍在学习 ML/TF,所以这可能是错误的做法。 在它“正常工作”之前,这一切都是黑魔法。
vectorize_layer = tf.keras.layers.experimental.preprocessing.TextVectorization(
standardize=tf_custom_standardize,
split=tf_custom_split,
max_tokens=len(vocab)+1,
output_mode='int',
dynamic=True
)
这个问题对我来说仍然存在。 我没有使用 @tf.function 注释并急切地执行。 我现在使用的解决方法是 np.array(yourtensor.to_list())
这个问题对我来说仍然存在。 我没有使用 @tf.function 注释并急切地执行。 我现在使用的解决方法是 np.array(yourtensor.to_list())
这就是我得到的AttributeError: 'Tensor' object has no attribute 'to_list'
根据tensorflow中的代码,当tensor对象处于eager模式tensor(tensorflow.python.framework.ops.EagerTensor)时,我们可以调用tesnsorObj.numpy()
这个方法在tensorflow/python/framework/ops.py中实现
但是如果tensor对象是一个通用的tensor,比如属于tensorflow.python.framework.ops.Tensor,那么它就没有numpy()方法,实现代码也在tensorflow/python/framework/ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py
这意味着在@tf.function 中运行的所有张量对象都无法调用 tensorObj.numpy()
急切运行模式为 TF2.0 增加了灵活性,也增加了它的复杂性。
根据tensorflow中的代码,当tensor对象处于eager模式tensor(tensorflow.python.framework.ops.EagerTensor)时,我们可以调用tesnsorObj.numpy()
这个方法在tensorflow/python/framework/ops.py中实现
但是如果tensor对象是一个通用的tensor,比如属于tensorflow.python.framework.ops.Tensor,那么它就没有numpy()方法,实现代码也在tensorflow/python/framework/ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py这意味着在@tf.function 中运行的所有张量对象都无法调用 tensorObj.numpy()
急切运行模式为 TF2.0 增加了灵活性,也增加了它的复杂性。
谢谢详细的解释。
但是,这个问题在稳定的 2.1.0 版本中并没有解决。 在#38038 中向我指出它已在 tf-nightly 2.2.0 版本中解决。
@renatomello我是 TF 的完全新手。 因此,我不确定以下内容是否有助于解决您的问题。
我通过使用Experiment_run_functions_eagerly(True)解决了错误AttributeError: 'Tensor' object has no attribute 'numpy'
。
我用的是TF版本。 2.1(有关详细版本信息,请参阅下面的控制台输出)。 我允许解释我用这段代码做什么:
import sys
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
counter=0
class MyDense(layers.Dense):
def __init__(self, units, activation,input_shape):
super().__init__(units=units, activation=activation,input_shape=input_shape)
def call(self, inputs):
global counter
counter += 1
print('\n{}. inputs.numpy()='.format(counter))
if hasattr(inputs,'numpy'):
print('{}'.format(inputs.numpy()))
else:
print('not available.')
return super().call(inputs)
def test(run_eagerly):
print('\n*** *** *** test(run_eagerly={})'.format(run_eagerly))
tf.config.experimental_run_functions_eagerly(run_eagerly)
dim0=256
dim1=24
train = np.arange(dim0*dim1).reshape(dim0,dim1)
label = np.ones(dim0)
model = tf.keras.Sequential()
model.add(MyDense(10,activation='softmax',input_shape=(dim1,)))
model.compile(optimizer=tf.keras.optimizers.SGD(),
loss=tf.keras.losses.SparseCategoricalCrossentropy())
model.fit(train,
label,
batch_size=dim0,
epochs=1)
print("Python version")
print (sys.version)
print("TensorFlow version")
print(tf.__version__)
print('\n\n')
test(False)
test(True)
我在编辑器 Spyder 的控制台(Spyder 版本 4.0.1)中执行上述代码。 相应的控制台输出是(只是输出的一部分):
Python version
3.7.6 (default, Jan 8 2020, 19:59:22)
[GCC 7.3.0]
TensorFlow version
2.1.0
*** *** *** test(run_eagerly=False)
1. inputs.numpy()=
not available.
Train on 256 samples
2. inputs.numpy()=
not available.
3. inputs.numpy()=
not available.
256/256 [==============================] - 0s 899us/sample - loss: 6344.8682
*** *** *** test(run_eagerly=True)
4. inputs.numpy()=
not available.
Train on 256 samples
5. inputs.numpy()=
[[2328. 2329. 2330. ... 2349. 2350. 2351.]
[5280. 5281. 5282. ... 5301. 5302. 5303.]
[2208. 2209. 2210. ... 2229. 2230. 2231.]
...
[5160. 5161. 5162. ... 5181. 5182. 5183.]
[ 840. 841. 842. ... 861. 862. 863.]
[6048. 6049. 6050. ... 6069. 6070. 6071.]]
256/256 [==============================] - 0s 132us/sample - loss: 16.1181
现在,在test(run_eagerly=False)
下方的控制台输出中看到:所有三个 MyDense.call() 调用状态,该 input.numpy() 不可用(旁注:当我理解正确时,前两个 MyDense.call () 调用仅用于构建模型。因此,有意义的是,它们没有可用的 input.numpy()。)。 所以,这是有意义的。
在test(run_eagerly=True)
下方的控制台输出中查看:在第五个 MyDense.call() 中是 input.numpy() 可用。 所以,这也是有意义的。 它解决了错误。
我遇到过同样的问题。 原来我试图在@tf.function 中使用 .numpy()。 据我了解 tf.function 并不是出于性能目的而急切地执行。 如果我删除 @tf.function 装饰器 .numpy() 工作。
这个对我有用。
我已经尝试了该线程中提到的所有解决方案,但没有一个对我有用。 我在 2.2.0-rc2 上。
就我而言,急切执行似乎不是问题。 当我调用keras.backend.get_value()
时,错误来自这些行:
if context.executing_eagerly() or isinstance(x, ops.EagerTensor):
return x.numpy()
有同样的问题。 事实证明,在模型上运行拟合函数时,默认情况下会禁用急切执行。 为了解决这个问题,您可以在运行 model.fit 之前运行: model.run_eagerly = True
。
这对我来说在 Tensorflow 2.2 上很有魅力
model.compile(..., run_eagerly=True) 在创建自定义指标时对我有用
我在使用 Keras 时遇到了类似的问题。
我不知道这是否会帮助其他人,但以下帮助了我:
我正在使用:
模型 = Sequential() 之前并将其更改为
模型 = tf.keras.Sequential()
它对我有用。
@ Mainak431你介意重新打开这个问题吗?
我在使用 Keras 时遇到了类似的问题。
我不知道这是否会帮助其他人,但以下帮助了我:
我正在使用:
模型 = Sequential() 之前并将其更改为
模型 = tf.keras.Sequential()
它对我有用。
这实际上是我的解决方案,我重用了一些直接从 keras 导入的旧代码,而不是 tensorflow.keras 层等。更改导入语句解决了属性错误。
@Blubbaa在这里也一样。 这是唯一对我有用的东西。
如果我想检查张量中的值,但由于tf.placeholder
兼容性而不得不禁用 Eager 模式,我该怎么办? 我试图在没有tf.placeholder
的图层之间添加tf.enable_eager_execution
tf.placeholder
只是为了得到这个错误ValueError: tf.enable_eager_execution must be called at program startup.
以下代码有效:
def parse_str(str_tensor):
raw_string = str_tensor.numpy().decode("utf-8")
# play with raw string
raw_string = 'AAA'+raw_string
return raw_string
调用解析函数:
def tf_pre_processing(row):
return tf.py_function(parse_str, [row['context']], [tf.string])
train = t.map(tf_pre_processing).batch(1).take(1)
list(train)
@ Mainak431原始代码按预期工作。 这是要点。
@tu1258您不需要禁用急切执行。 只需将其导入为tf.compat.v1.placeholder
而不是tf.placeholder
。 如果它仍然不起作用,那么请共享一个独立的代码来重现该问题。
如果还有其他问题,请告诉我。 谢谢!
我遇到过同样的问题。 原来我试图在@tf.function 中使用 .numpy()。 据我了解 tf.function 并不是出于性能目的而急切地执行。 如果我删除 @tf.function 装饰器 .numpy() 工作。
我认为 Tensorflow2.x 中的以下选项可以提供帮助
tf.config.run_functions_eagerly
你调用tf.function的地方,你可以尝试急切执行,然后禁用tf.function的急切执行。
我是 tensorflow 的新手,但是按照本教程(在 Jupyter Notebook 上) https://www.tensorflow.org/tutorials/quickstart/beginner?hl=en会给你错误
predictions = model(x_train[:1]).numpy()
Tensor object has no attribute 'numpy'
@louisnot我无法重现该错误。 请在此处查看
如果您遇到错误,能否分享一个要点? 谢谢!
我在使用 gist 时没有遇到任何问题。
我正在关闭这个问题,因为它已在tf-nightly
得到解决。 如果问题仍然存在,请随时重新打开。 谢谢!
@bhupendrathore你能用一个简单的独立代码打开一个新问题来重现错误吗? 谢谢!
我遇到了同样的问题; 当我在您的解决方案中使用pip install tf-nightly
修复它时,会发生错误:
ERROR: Could not find a version that satisfies the requirement tf-nightly (from versions: none)
ERROR: No matching distribution found for tf-nightly
@jvishnuvardhan
@liangzelang我看到你又开了一个新问题。 我们会在那里解决它。 谢谢
最有用的评论
我遇到过同样的问题。 原来我试图在@tf.function 中使用 .numpy()。 据我了解 tf.function 并不是出于性能目的而急切地执行。 如果我删除 @tf.function 装饰器 .numpy() 工作。