我对 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
就像一个二维矩阵,其中2
isnumber of rows
和12
is 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?如何设置张量的秩?谁能用一些全面的例子详细解释一下?
我发现您提供的链接非常清楚。
张量的秩是它具有的维数
[height, width, 3]
因此其等级为 3张量的形状是每个维度中分量的详细数量
[6, 10]
,其中6
是行数和10
列数[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。
归档时间: |
|
查看次数: |
6222 次 |
最近记录: |