发新帖

TensorFlow 学习 -- 低级别 API - 张量 (2)

[复制链接]
255 0

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
转载自: https://tensorflow.google.cn/programmers_guide/tensors?hl=zh-CN


获取 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 文件编制中通过三种符号约定来描述张量维度:阶,形状和维数。下表阐述了三者如何相互关联:
[td]
形状
维数
示例
0[]0-D0 维张量。标量。
1[D0]1-D形状为 [5] 的 1 维张量。
2[D0, D1]2-D形状为 [3, 4] 的 2 维张量。
3[D0, D1, D2]3-D形状为 [1, 4, 3] 的 3 维张量。
n[D0, D1, ... Dn-1]n-D形状为 [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 的形状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!


本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表