python - 关于 TensorFlow 中等级和形状的混淆

标签 python tensorflow

我对 TensorFlow 的等级和形状概念感到困惑。我已阅读 here 的详细信息并确实运行了一些代码来清除我对它们的概念。但我仍然很困惑,需要帮助才能理解。

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,)

我认为 x 就像一个二维矩阵,其中 2number of rows12列数。那么为什么我将 x[120, :] 的形状设置为 (12, )?对于给定的形状,x[120, :] 怎么可能?

此外,因为我认为 x 是一个二维张量,所以它的秩也是 2,因为维度和秩对于张量来说是一回事(根据我的理解)。但是当我运行时:

print(x[0].get_shape())

我收到这个错误:

Shape (2, 12) must have rank 1

说明我对rank和dimension的理解有误。关于排名和维度,我缺少什么?等级和维度是两个不同的东西吗?上例中tensor x的rank如何为1?如何设置张量的等级?谁能用一些全面的例子详细解释一下?

最佳答案

我找到了 link你提供的很清楚。


张量的秩是它具有的维数

  • 矩阵有 2 个维度,所以它的秩为 2
  • 彩色图像有 3 个维度 [height, width, 3] 所以它的等级是 3

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

  • 矩阵有 2 个维度,秩为 2,形状可以像 [6, 10],其中 6 是行数,10 列数
  • 200x200 的彩色图像(排名 3)的形状为 [200, 200, 3]

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

res = x[120, :]

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

InvalidArgumentError: slice index 120 of dimension 0 out of bounds.


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

关于python - 关于 TensorFlow 中等级和形状的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859416/

相关文章:

tensorflow - BasicLSTMCell 的作用是什么?

python - 在AI Platform (CMLE)上使用tensorflow_dataset库

python - ValueError : Cannot feed value of shape (200, ) 对于张量 'Placeholder_32:0' ,其形状为 '(?, 1)'

python - matplotlib中的轴重叠线

python - Py-StackExchange 按标签过滤

python - 如何将额外的数据和图像一起提供给 CNN?

macos - Tensorflow 错误 tensorflow/core/platform/cloud/http_request.cc :334

列表上的 Python sort() 方法与内置 sorted() 函数

python - 多次调用函数的返回值不同

python - 在 mac 上安装 scrapy - 找不到 pyasn1 发行版