好文档 - 专业文书写作范文服务资料分享网站

TensorFlow编程指南张量

天下 分享 时间: 加入收藏 我要投稿 点赞

张量

正如名称所示,TensorFlow 这一框架定义和运行涉及张量的计算。张量是对矢量和矩阵向潜在的更高维度的泛化。TensorFlow 在内部将张量表示为基本数据类型的 n 维数组。

在编写 TensorFlow 程序时,您操作和传递的主要对象是 tf.Tensor。

tf.Tensor 对象表示一个部分定义的计算,最终会产生一个值。TensorFlow 程序首先会构建一个 tf.Tensor 对象图,详细说明如何基于其他可用张量计算每个张量,然后运行该图的某些部分以获得期望的结果。

tf.Tensor 具有以下属性:

? ?

数据类型(例如 float32、int32 或 string) 形状

张量中的每个元素都具有相同的数据类型,且该数据类型一定是已知的。形状,即张量的维数和每个维度的大小,可能只有部分已知。如果其输入的形状也完全已知,则大多数指令会生成形状完全已知的张量,但在某些情况下,只能在图的执行时间找到张量的形状。

某些类型的张量是特殊的,《编程人员指南》的其他部分中有所介绍。以下是主要的特殊张量:

? ? ? ?

tf.Variable tf.constant tf.placeholder tf.SparseTensor

除了 tf.Variable 以外,张量的值是不变的,这意味着对于单个执行任务,张量只有一个值。然而,两次评估同一张量可能会返回不同的值;例如,该张量可能是从磁盘读取数据的结果,或是生成随机数的结果。

tf.Tensor 对象的阶是它本身的维数。阶的同义词包括:秩、等级或 n 维。请

注意,TensorFlow 中的阶与数学中矩阵的阶并不是同一个概念。如下表所示,TensorFlow 中的每个阶都对应一个不同的数学实例:

0 1 2 3 n

数学实例

标量(只有大小) 矢量(大小和方向) 矩阵(数据表) 3 阶张量(数据立体) n 阶张量(自行想象)

0 阶

以下摘要演示了创建 0 阶变量的过程:

mammal = tf.Variable(\, tf.string) ignition = tf.Variable(451, tf.int16)

floating = tf.Variable(3.14159265359, tf.float64)

its_complicated = tf.Variable(12.3 - 4.85j, tf.complex64)

注意:字符串在 TensorFlow 中被视为单一项,而不是一连串字符串。TensorFlow 可以有标量字符串,字符串矢量,等等。

1 阶

要创建 1 阶 tf.Tensor 对象,您可以传递一个项目列表作为初始值。例如:

mystr = tf.Variable([\], tf.string)

cool_numbers = tf.Variable([3.14159, 2.71828], tf.float32) first_primes = tf.Variable([2, 3, 5, 7, 11], tf.int32)

its_very_complicated = tf.Variable([12.3 - 4.85j, 7.5 - 6.23j], tf.complex64)

更高阶

2 阶 tf.Tensor 对象至少包含一行和一列:

mymat = tf.Variable([[7],[11]], tf.int16)

myxor = tf.Variable([[False, True],[True, False]], tf.bool) linear_squares = tf.Variable([[4], [9], [16], [25]], tf.int32) squarish_squares = tf.Variable([ [4, 9], [16, 25] ], tf.int32) rank_of_squares = tf.rank(squarish_squares) mymatC = tf.Variable([[7],[11]], tf.int32)

同样,更高阶的张量由一个 n 维数组组成。例如,在图像处理过程中,会使用许多 4 阶张量,维度对应批次大小、图像宽度、图像高度和颜色通道。

my_image = tf.zeros([10, 299, 299, 3]) # batch x height x width x color

获取 tf.Tensor 对象的阶

要确定 tf.Tensor 对象的阶,需调用 tf.rank 方法。例如,以下方法以编程方式确定上一章节中所定义的 tf.Tensor 的阶:

r = tf.rank(my_image)

# After the graph runs, r will hold the value 4.

引用 tf.Tensor 切片

由于 tf.Tensor 是 n 维单元数组,要访问 tf.Tensor 中的某一单元,需要指定 n 个索引。

0 阶张量(标量)不需要索引,因为其本身便是单一数字。

对于 1 阶张量(矢量)来说,通过传递单一索引可以访问某个数字:

my_scalar = my_vector[2]

请注意,如果想从矢量中动态地选择元素,那么在 [] 内传递的索引本身可以是一个标量 tf.Tensor。

对于 2 阶及以上的张量来说,情况更为有趣。对于 2 阶 tf.Tensor 来说,传递两个数字会如预期般返回一个标量:

my_scalar = my_matrix[1, 2]

而传递一个数字则会返回一个矩阵子矢量,如下所示:

my_row_vector = my_matrix[2]

my_column_vector = my_matrix[:, 3]

符号 : 是 Python 切片语法,意味“不要触碰该维度”。这对更高阶的张量来说很有用,可以帮助访问其子矢量,子矩阵,甚至其他子张量。

形状

张量的形状是每个维度中元素的数量。TensorFlow 在图的构建过程中自动推理形状。这些推理的形状可能具有已知或未知的阶。如果阶已知,则每个维度的大小可能已知或未知。

TensorFlow 文件编制中通过三种符号约定来描述张量维度:阶,形状和维数。下表阐述了三者如何相互关联:

0 1 2 3 n

形状

[] [D0] [D0, D1] [D0, D1, D2] [D0, D1, ... Dn-1]

维数

0-D 1-D 2-D 3-D n 维

示例

0 维张量。标量。 形状为 [5] 的 1 维张量。 形状为 [3, 4] 的 2 维张量。 形状为 [1, 4, 3] 的 3 维张量。 形状为 [D0, D1, ... Dn-1] 的张量。

形状可以通过整型 Python 列表/元组或者 tf.TensorShape 表示。

获取 tf.Tensor 对象的形状

有两种方法可以获取 tf.Tensor 的形状。在构建图的时候,询问有关张量形状的已知信息通常很有帮助。可以通过查看 tf.Tensor 对象的 shape 属性获取这些信息。该方法会返回一个 TensorShape 对象,这样可以方便地表示部分指定的形状(因为在构建图的时候,并不是所有形状都完全已知)。

也可以获取一个将在运行时表示另一个 tf.Tensor 的完全指定形状

的 tf.Tensor。为此,可以调用 tf.shape 操作。如此一来,您可以构建一个图,通过构建其他取决于输入 tf.Tensor的动态形状的张量来控制张量的形状。

例如,以下代码展示了如何创建大小与给定矩阵中的列数相同的零矢量:

zeros = tf.zeros(my_matrix.shape[1])

改变形状:tf.Tensor

张量的元素数量是其所有形状大小的乘积。标量的元素数量永远是 1。由于通常有很多不同的形状具有相同的元素,因此如果能够改变 tf.Tensor 的形状并使其元素固定不变通常会很方便。为此,可以使用 tf.reshape。 以下示例演示如何重构张量:

rank_three_tensor = tf.ones([3, 4, 5])

matrix = tf.reshape(rank_three_tensor, [6, 10]) # Reshape existing content into

# a 6x10 matrix

matrixB = tf.reshape(matrix, [3, -1]) # Reshape existing content into a 3x20

# matrix. -1 tells reshape to calculate

# the size of this dimension. matrixAlt = tf.reshape(matrixB, [4, 3, -1]) # Reshape existing content into a

#4x3x5 tensor # Note that the number of elements of the reshaped Tensors has to match the

# original number of elements. Therefore, the following example generates an

# error because no possible value for the last dimension will match the number

# of elements.

yet_another = tf.reshape(matrixAlt, [13, 2, -1]) # ERROR!

数据类型

除维度外,张量还具有数据类型。请参阅《编程人员指南》中的 tf.DataType 页面,以获取数据类型的完整列表。

TensorFlow编程指南张量

张量正如名称所示,TensorFlow这一框架定义和运行涉及张量的计算。张量是对矢量和矩阵向潜在的更高维度的泛化。TensorFlow在内部将张量表示为基本数据类型的n维数组。在编写TensorFlow程序时,您操作和传递的主要对象是tf.Tensor。tf.Tensor对象表示一个部分定义的计算,最终会产生一个值。TensorF
推荐度:
点击下载文档文档为doc格式
86c5q4io5j5dq8n1sig30fluh9boav00uk4
领取福利

微信扫码领取福利

微信扫码分享