【问题标题】:Why the input of tensorflow SimpleRNNCell is 3D?为什么tensorflow SimpleRNNCell的输入是3D的?
【发布时间】:2019-08-20 11:23:31
【问题描述】:

我正在测试张量流tf.keras.layers.SimpleRNNCell。我觉得太奇怪了。我认为 RNN 单元是接收先前状态 a^{<t-1>} 和当前数据输入 x^{<t>} 的单元。它将输出新状态a^{<t>} 和当前预测\hat{y}^{<t>}

因此,如果设置了 batch_size,SimpleRNNCell 输入应该是 2d。我认为输入应该是[batch_size,feature_size]。但是,如果输入是 2D 则会引发错误。而以前的状态也需要3D。

正确的代码如下:

batch_data = tf.ones((batch_size, time_steps, label_num))    
simple_rnn_cell = tf.keras.layers.SimpleRNNCell(units)
initial_state = tf.zeros((batch_size, time_steps, units))
output, rnn_cell_state = simple_rnn_cell(batch_data, initial_state)

但是,我认为以下代码是正确的。但我错了

batch_data = tf.ones((batch_size, label_num))    
simple_rnn_cell = tf.keras.layers.SimpleRNNCell(units)
initial_state = tf.zeros((batch_size, units))
output, rnn_cell_state = simple_rnn_cell(batch_data, initial_state)

所以我的问题是为什么SimpleRNNCell 的输入是 3D 的?

【问题讨论】:

    标签: python tensorflow keras recurrent-neural-network


    【解决方案1】:

    第三维是许多特征,用于多变量时间序列。在您的情况下,使用的特征数量为 1。例如,您可以认为张量 [1,2,3] 是 1D,[[1,2,3]] 是 2D,形状为 (1,3), [[[1,2,3]]] 是 3D 的,形状为 (1,1,3) 等等。

    因此,如果我们采用一个输入样本,一个变量时间序列将是 [[1,2,3]],但两个变量时间序列可能看起来像 [[1,2,3], [7,8,9 ]]。

    【讨论】:

      【解决方案2】:

      RNN(或 LSTM)的输入应该具有 [batch_size, timesteps, nbr_features] 的形状

      【讨论】:

      • 我知道。但这里我要问的是 SimpleRNNCell,它是 RNN 的一个单元
      猜你喜欢
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      相关资源
      最近更新 更多