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

It seems inconsistent the ways tensorflow allows me to specify variable length 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开发者的小设计失误?

你可以这样理解:在占位符中,值"None"表示:"could be any value"。就像您的情况一样:您的批量大小可以是任何大小。 在重塑函数中,-1 表示 "whatever value is remaining to make this shape work"。在你的情况下,你的 x 得到形状 (batch*n_steps),因为这是 x 需要的形状来适应矩阵中的相同数据。

有趣的注意事项:您可以在占位符中使用多个 None 值(以指示图像的任何批量大小、任何宽度和高度)...但是您不能在其中使用多个 -1 值重塑函数!