TensorFlow占位符维度 - 区别是什么?

时间:2017-02-27 16:26:08

标签: python machine-learning tensorflow

TensorFlow的新功能,但我仍然坚持这个占位符声明问题。将占位符x定义为:

之间的区别究竟是什么?
x = tf.placeholder(tf.float32, [None, seq_size])

与此相反?

x = tf.placeholder(tf.float32, [None, seq_size, 1])

我在思考矩阵方面。所以说,假设变量x被输入10个值,而seq_size是3 - 第一个给出10x3而第二个给出10x3x1。为什么tensorflow会以不同的方式考虑它们?

2 个答案:

答案 0 :(得分:2)

Tensorflow将在形状验证方面对其进行不同的考虑。 由于尺寸1和3不匹配,因此第二个版本将无法使用尺寸为3x4的矩阵进行矩阵乘法。 Tensorflow将能够在图形构造中检测到它。

此外,在代码可读性方面,如果将来可能更改此维度,则有一般理解可能有额外的维度1。例如,如果您的数据点是单变量时间序列,请使用

x = tf.placeholder(tf.float32, [None, seq_size, 1])

可以更轻松地将结果扩展到维度为d>1的多变量时间序列

x = tf.placeholder(tf.float32, [None, seq_size, d])

因为所有代码都已经考虑了这个额外的维度。

答案 1 :(得分:0)

x = tf.placeholder(tf.float32, [None, seq_size, 1])

这里' x'是一个占位符来保持大小的张量[任何东西,seq_size,1]。这对于矩阵运算是有利的,其中一些多维运算可以通过将它们上层到更高维矩阵而容易地执行。

P.S:形状数组中的元素数量[无,seq_size]& [None,seq_size,1]可以是相同的。它们可以很容易地相互重塑。