当前位置:  开发笔记 > 编程语言 > 正文

如何在TensorFlow中将张量转换为numpy数组?

如何解决《如何在TensorFlow中将张量转换为numpy数组?》经验,为你挑选了4个好方法。

在使用带有Python绑定的Tensorflow时,如何将张量转换为numpy数组?



1> Lenar Hoyt..:

Session.run或返回的任何张量eval是NumPy数组.

>>> print(type(tf.Session().run(tf.constant([1,2,3]))))

要么:

>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))

或者,等效地:

>>> sess = tf.Session()
>>> with sess.as_default():
>>>    print(type(tf.constant([1,2,3]).eval()))

编辑:没有任何张量返回Session.run或是eval()NumPy数组.例如,稀疏张量作为SparseTensorValue返回:

>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))



2> Rafał Józefo..:

要从张量转换回numpy数组,您可以简单地运行.eval()转换张量.


我得到`ValueError:无法使用'eval()'评估张量:没有注册默认会话.使用'with sess.as_default()'或将显式会话传递给'eval(session = sess)'`这是否仅在tenoflow会话期间可用?
@EduardoPignatelli你需要在会​​话中运行`.eval()`方法调用:`sess = tf.Session(); 与sess.as_default():print(my_tensor.eval())`
澄清:yourtensor.eval()

3> cs95..:
TensorFlow 2.0

急切执行默认情况下.numpy()处于启用状态,因此只需调用Tensor对象即可。

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数组可以与Tensor对象共享内存。对一个的任何更改都可能反映在另一个上。

大胆强调我的。副本可能会也可能不会返回,这是实现的详细信息。


如果禁用了“急切执行”,则可以构建一个图形,然后通过tf.compat.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的映射。



4> Gooshan..:

你需要:

    将图像张量以某种格式(jpeg,png)编码为二进制张量

    在会话中评估(运行)二进制张量

    将二进制文件转换为流

    送入PIL图片

    (可选)使用matplotlib显示图像

码:

import tensorflow as tf
import matplotlib.pyplot as plt
import PIL

...

image_tensor = 
jpeg_bin_tensor = tf.image.encode_jpeg(image_tensor)

with tf.Session() as sess:
    # display encoded back to image data
    jpeg_bin = sess.run(jpeg_bin_tensor)
    jpeg_str = StringIO.StringIO(jpeg_bin)
    jpeg_image = PIL.Image.open(jpeg_str)
    plt.imshow(jpeg_image)

这对我有用。您可以在ipython笔记本中尝试。只是不要忘记添加以下行:

%matplotlib inline

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有