作者|Orhan G. Yalçın 编译|VK 来源|Towards Datas Science
如果你正在读这篇文章,我相信我们有着相似的兴趣,现在/将来也会从事类似的行业。
在这篇文章中,我们将深入研究Tensorflow Tensor的细节。我们将在以下五个简单步骤中介绍与Tensorflow的Tensor中相关的所有主题:
第一步:张量的定义→什么是张量?
第二步:创建张量→创建张量对象的函数
第三步:张量对象的特征
第四步:张量操作→索引、基本张量操作、形状操作、广播
第五步:特殊张量
张量的定义:什么是张量
张量是TensorFlow的均匀型多维数组。它们非常类似于NumPy数组,并且它们是不可变的,这意味着一旦创建它们就不能被更改。只能使用编辑创建新副本。
让我们看看张量如何与代码示例一起工作。但是首先,要使用TensorFlow对象,我们需要导入TensorFlow库。我们经常将NumPy与TensorFlow一起使用,因此我们还可以使用以下行导入NumPy:
import tensorflow as tf
import numpy as np
张量的创建:创建张量对象
有几种方法可以创建tf.Tensor对象。让我们从几个例子开始。可以使用多个TensorFlow函数创建张量对象,如下例所示:
# 你可以用`tf.constant`函数创建tf.Tensor对象:
x = tf.constant([[1, 2, 3, 4 ,5]])
# 你可以用`tf.ones`函数创建tf.Tensor对象:
y = tf.ones((1,5))
# 你可以用`tf.zeros`函数创建tf.Tensor对象:
z = tf.zeros((1,5))
# 你可以用`tf.range`函数创建tf.Tensor对象:
q = tf.range(start=1, limit=6, delta=1)
print(x)
print(y)
print(z)
print(q)
输出:
tf.Tensor([[1 2 3 4 5]], shape=(1, 5), dtype=int32)
tf.Tensor([[1. 1. 1. 1. 1.]], shape=(1, 5), dtype=float32)
tf.Tensor([[0. 0. 0. 0. 0.]], shape=(1, 5), dtype=float32)
tf.Tensor([1 2 3 4 5], shape=(5,), dtype=int32)
如你所见,我们使用三个不同的函数创建了形状(1,5)的张量对象,使用tf.range()函数创建了形状(5,)的第四个张量对象。注意,tf.ones的和tf.zeros接受形状作为必需的参数,因为它们的元素值是预先确定的。
张量对象的特征
tf.Tensor创建对象,它们有几个特征。首先,他们有维度数量。其次,它们有一个形状,一个由维度的长度组成的列表。所有张量都有一个大小,即张量中元素的总数。最后,它们的元素都被记录在一个统一的数据类型(datatype)中。让我们仔细看看这些特征。
维度
张量根据其维数进行分类:
Rank-0(标量)张量:包含单个值且没有轴的张量(0维);
Rank-1张量:包含单轴(一维)值列表的张量;
Rank-2张量:包含2个轴(2维)的张量;以及
Rank-N张量:包含N轴的张量(三维)。
例如,我们可以通过向tf.constant传递一个三层嵌套的list对象来创建一个Rank-3张量。对于这个例子,我们可以将数字分割成一个3层嵌套的列表,每个层有3个元素:
three_level