tensorflow允许我指定可变长度维度的方式似乎不一致

时间:2017-02-20 07:44:08

标签: python tensorflow dimension

我是张力流的新手。我用这个tutorial code练习编码。大部分代码对我来说都很有意义,但在某些方面我陷入困境。

import tensorflow as tf
x = tf.placeholder("float", [None, n_steps, n_input])
x = tf.transpose(x, [1, 0, 2])
x = tf.reshape(x, [-1, n_input])

使用tf.placholder函数,我必须使用None指定可变长度尺寸。但是tf.reshape我必须使用-1,而不是None。在这两个函数的文档中,两个相关参数都具有名称shape。所以我感到迷失在这里。他们真的有不同的含义吗?或者这只是tensorflow开发人员的一个小设计错误?

1 个答案:

答案 0 :(得分:2)

您可以这样理解:在占位符中,值“无”表示:“可以是任何值”。就像你的情况一样:你的批量大小可以是任何东西。 在重塑函数中,-1表示“使该形状工作的剩余值”。在你的情况下,你的x得到形状(batch * n_steps),因为这是x需要在矩阵中拟合相同数据的形状。

有趣的说明:您可以在占位符中使用多个None值(表示任何批量大小,图像的任何宽度和高度)...但您不能在重塑函数中使用多个-1值!