当使用Tensorflow与Python绑定时,如何将一个张量转换为numpy数组?


当前回答

也许你可以试试这个方法:

import tensorflow as tf
W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
array = W1.eval(sess)
print (array)

其他回答

我已经面对并解决了张量->ndarray转换在张量表示(对抗)图像的特定情况下,通过cleverhans库/教程获得。

我认为我的问题/答案(在这里)也可能是一个有用的例子,对其他情况。

我是TensorFlow的新手,我的结论是经验的:

看起来为了成功,tensor.eval()方法可能还需要输入占位符的值。 Tensor可以像一个函数一样工作,需要它的输入值(提供给feed_dict)来返回一个输出值,例如:

array_out = tensor.eval(session=sess, feed_dict={x: x_input})

请注意,在我的例子中,占位符的名称是x,但我认为您应该为输入占位符找出正确的名称。 X_input是一个包含输入数据的标量值或数组。

在我的案例中,提供sess也是强制性的。

我的示例还包括matplotlib图像可视化部分,但这是OT。

TensorFlow 2.倍

Eager Execution在默认情况下是启用的,所以只需在Tensor对象上调用.numpy()即可。

import tensorflow as tf

a = tf.constant([[1, 2], [3, 4]])                 
b = tf.add(a, 1)

a.numpy()
# array([[1, 2],
#        [3, 4]], dtype=int32)

b.numpy()
# array([[2, 3],
#        [4, 5]], dtype=int32)

tf.multiply(a, b).numpy()
# array([[ 2,  6],
#        [12, 20]], dtype=int32)

更多信息请参见NumPy兼容性。值得注意的是(从文档中),

Numpy数组可以和Tensor对象共享一个内存。其中一个的任何变化都可能反映在另一个中。

大胆强调我的。可能返回副本,也可能不返回,这是基于数据是在CPU还是GPU中的实现细节(在后一种情况下,必须从GPU复制到主机内存)。

但为什么我得到AttributeError: 'Tensor'对象没有属性'numpy'? 很多人都对这个问题发表了评论,有几个可能的原因:

TF 2.0没有正确安装(在这种情况下,请尝试重新安装),或者 已经安装了TF 2.0,但是由于某种原因禁用了快速执行。在这种情况下,调用tf. compatat .v1.enable_eager_execution()来启用它,或参见下文。


如果禁用了Eager Execution,你可以构建一个图,然后通过tf. compatat .v1. session运行它:

a = tf.constant([[1, 2], [3, 4]])                 
b = tf.add(a, 1)
out = tf.multiply(a, b)

out.eval(session=tf.compat.v1.Session())    
# array([[ 2,  6],
#        [12, 20]], dtype=int32)

请参见TF 2.0符号映射,了解旧API到新API的映射。

TensorFlow 1.倍

文件夹特遣部队。1、只需使用以下命令:

a = tf.constant([[1, 2], [3, 4]])                 
b = tf.add(a, 1)
out = tf.multiply(a, b)
out.eval(session=tf.Session())

输出将是:

# array([[ 2,  6],
#       [12, 20]], dtype=int32)

您可以使用keras后端函数。

import tensorflow as tf
from tensorflow.python.keras import backend 

sess = backend.get_session()
array = sess.run(< Tensor >)

print(type(array))

<class 'numpy.ndarray'>

我希望这能有所帮助!

要将张量转换回numpy数组,只需在转换后的张量上运行.eval()。