Tensorfow中Tensor与Numpy的ndarray转换

一、Numpy的简单介绍

NumPy是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),其核心数据结构为ndarray

二、用Numpy转换的原因

import tensorflow as tf
t = tf.constant([1, 2, 3], tf.float32)
print(t)

Tensor("Const:0", shape=(3,), dtype=float32)

从此可以看出,没有打印出张量的值,只是打印出了一部分信息。Tensorflow 通过创建会话(session),将张量转化为Numpy中的ndarray,从而打印出张量的值。

三、tensor与ndarray的相互转换

3.1 tensor转化为ndarray

3.1.1 直接转化

# -*- coding: utf-8 -*-
import tensorflow as tf
# 创建张量
t = tf.constant([1, 2, 3, 4], tf.float32)
# 创建会话
session = tf.Session()
# 张量转化为ndarray
array = session.run(t)
# 打印其数据类型与其值
print(type(array))
print(array)

<class 'numpy.ndarray'>
[ 1.  2.  3.  4.]

3.1.2 利用Tensor的成员函数eval

# -*- coding: utf-8 -*-
import tensorflow as tf
# 创建张量
t = tf.constant([1, 2, 3, 4], tf.float32)
# 创建会话
session = tf.Session()
# 张量转化为ndarray
array = t.eval(session=session)
# 打印其数据类型与其值
print(type(array))
print(array)

<class 'numpy.ndarray'>
[ 1.  2.  3.  4.]

以上代码的另外一种写法为:

# -*- coding: utf-8 -*-
import tensorflow as tf
# 创建张量
t = tf.constant([1, 2, 3, 4], tf.float32)
# 张量转化为ndarray
with tf.Session() as session:
    array = t.eval()
    # 打印其数据类型与其值
    print(type(array))
    print(array)

<class 'numpy.ndarray'>
[ 1.  2.  3.  4.]

3.2 ndarray转化为tensor

TensorFlow 通过 convert_to_tensor 这个函数进行转换,代码如下:

# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
# 创建ndarray
array = np.array([1, 2, 3, 4], np.float32)
# 将ndarray转化为tensor
t = tf.convert_to_tensor(array, tf.float32, name='t')
# 打印输出
print(t)

Tensor("t:0", shape=(4,), dtype=float32)

猜你喜欢

转载自blog.csdn.net/a1786742005/article/details/84994700
今日推荐