dynamic_rnn 中的 Tensorflow 1.0 LSTM Cell 抛出维度错误

Tensorflow 1.0 LSTM Cell in dynamic_rnn throws dimension error

我正在尝试将 LSTM 模型实现为 model_fn 估算器的输入。我的 X 只是一个包含价格时间序列的 .txt。在进入我的第一个隐藏层之前,我尝试将 lstm 单元定义为:

  def lstm_cell():
   return tf.contrib.rnn.BasicLSTMCell(
   size, forget_bias=0.0, state_is_tuple=True)
  attn_cell = lstm_cell
  if is_training and keep_prob < 1:
   def attn_cell():
    return tf.contrib.rnn.DropoutWrapper(
    lstm_cell(), output_keep_prob=keep_prob)
  cell = tf.contrib.rnn.MultiRNNCell([attn_cell() for _ in  range(num_layers)], state_is_tuple=True)
  initial_state = cell.zero_state(batch_size, data_type())
  inputs = tf.unstack(X, num=num_steps, axis=0)  
  outputs = []
  outputs, state = tf.nn.dynamic_rnn(cell, inputs,
                           initial_state=initial_state)

这应该进入:

  first_hidden_layer = tf.contrib.layers.relu(outputs, 1000)

不幸的是,它抛出一个错误,指出 "ValueError: Dimension must be 1 but is 3 for 'transpose' (op: 'Transpose') with input shapes: [1], [3]." 我发现我的问题是 "inputs" 张量。在它的描述中,输入变量应该是一个形式为 [batch_size,max_time,...] 的张量,但我不知道如何将其转换为上述结构,因为通过估算器,只有输入值 X 和目标值 y 被馈送到系统。所以我的问题是如何创建一个张量作为 dynamic_rnn class.

的输入变量

非常感谢。

我相信你不需要这条线:

inputs = tf.unstack(X, num=num_steps, axis=0)

您可以将 X 直接提供给 dynamic_rnn,因为 dynamic_rnn 不采用张量列表;它需要一个张量,其中时间轴是维度 0(如果 time_major == True)或维度 1(如果 time_major == False)。

实际上,X 似乎只有二维,因为 inputs 是一维张量的列表(如错误消息所示)。所以您应该将 unstack 行替换为:

inputs = tf.expand_dims(X, axis=2)

这将添加 dynamic_rnn

所需的大小为 1 的第 3 个维度