我对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
就像一个二维矩阵,其中2
是number of rows
而12
是number of columns
。那么为什么我要x[120, :]
成为(12, )
?对于给定的形状,偶数x[120, :]
是多么可能?
此外,因为我认为x是2D张量,它的等级也是2,因为尺寸和等级对于张量是相同的(根据我的理解)。但是当我跑步时:
print(x[0].get_shape())
我收到此错误:
Shape (2, 12) must have rank 1
这意味着我对等级和维度的理解是错误的。关于排名和维度,我缺少什么?等级和维度是两个不同的东西?上例中tensor x
的等级是1?如何设置张量的等级?任何人都可以用一些全面的例子详细解释一下吗?
答案 0 :(得分:2)
我发现你提供的link非常明确。
张量的等级是维数
ggplot(df_summ, aes(Disease, Percent)) +
geom_bar(aes(fill = PA), position = "stack", stat = "identity") +
scale_y_continuous(labels = scales::percent) +
facet_grid(~Var)
,因此其排名为3 张量的形状是每个维度中组件的详细数量
[height, width, 3]
的形状,其中[6, 10]
是行数,6
列数10
对于您的示例,[200, 200, 3]
可以写入,因为如果x[120, :]
是有效索引,则TensorFlow尚未检查。当您创建会话并运行代码时,您将发现错误:
120
InvalidArgumentError:维度0超出范围的切片索引120。
正如我在评论中所说,res = x[120, :]
with tf.Session():
sess.run(res, feed_dict={x: np.zeros((2, 12))})
应该使用最新版本的TensorFlow,它应该给出一个形状张量x[0]
,并且排名为1.
答案 1 :(得分:0)
经过一些分析,我发现在声明张量时,使用的方括号数量给出了张量的等级。形状中值的数量等于等级。例如:
a1=tf.constant(
[
[
[1,2,3,4,5],
[1,2,3,4,5],
[1,2,3,4,5],
[1,2,3,4,5]
]
]
)
在这里,我用了3个方括号。因此,等级为3。由于等级为3,形状也将采用(x,y,z)格式。
现在x,y和z的值:
x =第一个大括号中的逗号数加1 所以x = 0 + 1 = 1
类似 y = 3 + 1 = 4
z = 4 + 1 = 5
最后,等级为3,形状为(1,4,5)