TensorFlow 中关于秩和形状的混淆

Was*_*mad 5 python tensorflow

我对 TensorFlow 的秩和形状概念感到困惑。我已经从这里阅读了详细信息,并运行了一些代码来澄清我对它们的概念。但我仍然很困惑,需要帮助才能理解。

x = tf.placeholder(tf.float32, shape=[2, 12])
print(x.get_shape()) # ==> (2, 12)
print(x[0, :].get_shape())  # ==> (12,)
print(x[1, :].get_shape())  # ==> (12,)
print(x[2, :].get_shape())  # ==> (12,)
print(x[120, :].get_shape())  # ==> (12,)
Run Code Online (Sandbox Code Playgroud)

我认为x就像一个二维矩阵,其中2isnumber of rows12is number of columns。那为什么我的身材会越来越x[120, :]好呢(12, )x[120, :]对于给定的形状,均匀度如何?

此外,由于我认为 x 是一个 2D 张量,所以它的秩也是 2,因为张量的维数和秩是相同的(根据我的理解)。但是当我跑步时:

print(x[0].get_shape())
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Shape (2, 12) must have rank 1
Run Code Online (Sandbox Code Playgroud)

这意味着我对等级和维度的理解是错误的。我对等级和维度缺少什么?等级和维度是两个不同的东西吗?tensor x上例中 的秩如何为 1?如何设置张量的秩?谁能用一些全面的例子详细解释一下?

Oli*_*rot 6

我发现您提供的链接非常清楚。


张量的秩是它具有的维数

  • 矩阵有 2 维,因此其秩为 2
  • 彩色图像有 3 个维度,[height, width, 3]因此其等级为 3

张量的形状是每个维度中分量的详细数量

  • 矩阵有 2 维,秩为 2,可以具有类似 的形状[6, 10],其中6是行数和10列数
  • 200x200 彩色图像(等级 3)将具有形状[200, 200, 3]

对于您的示例,x[120, :]可以这样写,因为 TensorFlow 尚未检查 是否120是有效索引。当你创建会话并运行代码时,你会发现一个错误:

res = x[120, :]

with tf.Session():
    sess.run(res, feed_dict={x: np.zeros((2, 12))})
Run Code Online (Sandbox Code Playgroud)

InvalidArgumentError:维度 0 的切片索引 120 超出范围。


正如我在评论中所说,x[0]应该使用最新版本的 TensorFlow,并且它应该给出形状为 的张量(12,),并且等级为 1。