使用标准 Tensorflow:
import tensorflow as tf
x = tf.convert_to_tensor([0,1,2,3,4], dtype=tf.int64)
y = x + 10
sess = tf.InteractiveSession()
sess.run([
tf.local_variables_initializer(),
tf.global_variables_initializer(),
])
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
z = y.eval(feed_dict={x:[0,1,2,3,4]})
print(z) # [10 11 12 13 14]
print(type(z)) # <class 'numpy.ndarray'>
coord.request_stop()
coord.join(threads)
sess.close()
使用急切执行:
import tensorflow as tf
tf.enable_eager_execution() # requires r1.7
x = tf.convert_to_tensor([0,1,2,3,4], dtype=tf.int64)
y = x + 10
print(y) # tf.Tensor([10 11 12 13 14], shape=(5,), dtype=int64)
print(type(y)) # <class 'EagerTensor'>
如果我尝试
y.eval()
,我会得到
NotImplementedError: eval not supported for Eager Tensors
难道就没有办法转换这个吗?这使得 Eager Tensorflow 完全毫无价值。
有一个函数
tf.make_ndarray
应该将张量转换为 numpy 数组,但它会导致
AttributeError: 'EagerTensor' object has no attribute 'tensor_shape'
你完全正确:在 Eager Execution 中,你不需要使用
Session
或
.eval()
来获取张量的值。
EagerTensor 对象可以像 NumPy 数组一样直接使用,并与大多数 NumPy 函数兼容。你可以直接将 EagerTensor 传递给期望 NumPy 数组的函数,或者使用
.numpy()
方法将其显式转换为 NumPy 数组。
以下是如何使用 Eager Execution 将 EagerTensor 转换为 NumPy 数组:
import tensorflow as tf
tf.enable_eager_execution()
x = tf.convert_to_tensor([0,1,2,3,4], dtype=tf.int64)
y = x + 10
# 将 EagerTensor 转换为 NumPy 数组
y_np = y.numpy()
print(y_np) # [10 11 12 13 14]
print(type(y_np)) # <class 'numpy.ndarray'>
在你的代码中,你不需要任何额外的函数或转换来使用
y
的值,因为它已经表现得像一个 NumPy 数组。例如,你可以这样做:
for i in y:
print(i + 1)
这将打印出
y
中每个元素加 1 的结果。
希望这对你有帮助!如果还有其他问题,请告诉我。
标签:python,arrays,numpy,tensorflow,attributeerror From: 49568041