RNN 示例中的 Tensor Reshape No-op

Tensor Reshape No-op in RNN example

对于文件 rnn_cell.py 中的 RNNCell,此代码在方法 zero_state 中究竟做了什么?我不完全确定 [-1, n] 形式的形状是什么意思...

reshape 的语义与 numpy 的相似: http://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html

它将张量更改为二维,第二维应该有 self.state_size 个元素。例如。如果我的张量有 6 个元素,我将它重塑为 [-1, 2],那么第一个维度将有 6 / 2 = 3 个元素。

Rafal 的例子很棒。我记得 -1 的方式是将该维度的大小设置为适合原始张量的所有数据所需的任何大小。重塑中只能有一个-1。

如果原始张量大小为a,b,c(总元素=abc) 然后将其调整为 x, y, -1,

那么效果就是 -1 最终会变成 abc/(y*z).

整形为 9,3,-1 的 3,3,3 张量(27 个元素)实际大小为 9,3,1(27 个元素)

Documentation vaguely suggests -1 的行为。

If shape is the special value [-1], then tensor is flattened and the operation outputs a 1-D tensor with all elements of tensor.

当形状为数组时,其中一个元素为 -1,此值只是一些可能产生相同形状的整数的方便占位符。请注意,可能没有这样的整数(例如,如果您的起始矩阵是 [5x5],则不能使用 [7, -1] 对其进行整形)。

也如你所见,不能有两个-1,因为这会使形状不明确。如前所述,该行为类似于 numpy's reshape.