为什么 "NumPy操作自动将Tensors转换为numpy数组",这个功能是如何实现的?

问题描述 投票:1回答:1

阅读TensorFlow文档。https:/www.tensorflow.orgtutorialscustomizationbasics#numpy_compatibility

import numpy as np

ndarray = np.ones([3, 3])

print("TensorFlow operations convert numpy arrays to Tensors automatically")
tensor = tf.multiply(ndarray, 42)
print(tensor)


print("And NumPy operations convert Tensors to numpy arrays automatically")
print(np.add(tensor, 1))

print("The .numpy() method explicitly converts a Tensor to a numpy array")
print(tensor.numpy())

tensor = tf.multiply(ndarray, 42)

TF API支持NumPy对象作为输入,这个很容易理解,因为TF API只是TensorFlow团队为了处理NumPy对象而实现的。

但是

print(np.add(tensor, 1))

相反,为什么NumPy的API可以处理一个tf.Tensor,这让我很惊讶,这是NumPy提供的处理任何类型对象的机制吗?还是只是Python在语言层面上支持的?(我是Python新手)

python numpy tensorflow
1个回答
0
投票

TensorFlow的API围绕着张量展开,张量从一个操作流向另一个操作--因此被称为TensorFlow。一个张量通常是一个多维数组(完全像NumPy ndarray),但它也可以包含一个标量(一个简单的值,如42)。当我们创建自定义成本函数、自定义度量、自定义图层等时,这些张量将非常重要,所以让我们看看如何创建和操作它们。

Numpy和TensorFlow都是N-d阵列库。Tensors是从矢量空间到实数的多线映射。Scalar、Vector和Matrix都是张量。所以张量可以表示为一个多维数组。

Numpy支持N-d数组,但没有创建张量函数的方法,不能自动计算导数,也不能利用GPU。

TensorFlow提供了在张量上定义函数和自动计算其导数的基元。TensorFlow的计算定义了一个图形,这个图形在被评估之前没有数值。这个图可以被看作是以每个操作为节点,Tensors在每个节点上被转换并传播到图中的下一个操作。

Tensors与NumPy玩得很好:你可以从一个NumPyarray创建一个张量,反之亦然。你甚至可以将TensorFlow操作应用于NumPy数组,将NumPy操作应用于张量。

>>> a = np.array([2., 4., 5.])
>>> tf.constant(a)
<tf.Tensor: id=111, shape=(3,), dtype=float64, numpy=array([2., 4., 5.])>>>> t.numpy() # or np.array(t)
array([[1., 2., 3.],
[4., 5., 6.]], dtype=float32)
>>> tf.square(a)
<tf.Tensor: id=116, shape=(3,), dtype=float64, numpy=array([4., 16.,
25.])>
>>> np.square(t)
array([[ 1., 4., 9.],
[16., 25., 36.]], dtype=float32)
© www.soinside.com 2019 - 2024. All rights reserved.