关于TensorFlow中

时间:2016-11-29 06:47:17

标签: 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 rows12number 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?如何设置张量的等级?任何人都可以用一些全面的例子详细解释一下吗?

2 个答案:

答案 0 :(得分:2)

我发现你提供的link非常明确。

张量的等级是维数

  • 矩阵有2个维度,因此其等级为2
  • 彩色图片有3个维度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

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

  • 矩阵有2个维度,等级2,可以有[height, width, 3]的形状,其中[6, 10]是行数,6列数
  • 200x200彩色图像(等级3)的形状为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)