【问题标题】:MultiRNN and static_rnn error: Dimensions must be equal, but are 256 and 129MultiRNN 和 static_rnn 错误:维度必须相等,但是是 256 和 129
【发布时间】:2018-06-30 13:51:17
【问题描述】:

我想构建一个具有 3 层的 LSTM 网络。代码如下:

num_layers=3
time_steps=10
num_units=128
n_input=1
learning_rate=0.001
n_classes=1
...

x=tf.placeholder("float",[None,time_steps,n_input],name="x")
y=tf.placeholder("float",[None,n_classes],name="y")
input=tf.unstack(x,time_steps,1)

lstm_layer=rnn_cell.BasicLSTMCell(num_units,state_is_tuple=True)
network=rnn_cell.MultiRNNCell([lstm_layer for _ in range(num_layers)],state_is_tuple=True)

outputs,_=rnn.static_rnn(network,inputs=input,dtype="float")

使用num_layers=1 可以正常工作,但是如果使用不止一层,我会在这一行得到错误:

outputs,_=rnn.static_rnn(network,inputs=input,dtype="float")

ValueError: 尺寸必须相等,但为 256 和 129 'rnn/rnn/multi_rnn_cell/cell_0/cell_0/basic_lstm_cell/MatMul_1'(操作: 'MatMul') 输入形状:[?,256], [129,512]。

谁能解释值 129 和 512 的来源?

【问题讨论】:

    标签: python tensorflow deep-learning lstm recurrent-neural-network


    【解决方案1】:

    您不应该为第一层和更深层重复使用相同的单元,因为它们的输入不同,因此内核矩阵也不同。试试这个:

    # Extra function is for readability. No problem to inline it.
    def make_cell(lstm_size):
      return tf.nn.rnn_cell.BasicLSTMCell(lstm_size, state_is_tuple=True)
    
    network = rnn_cell.MultiRNNCell([make_cell(num_units) for _ in range(num_layers)], 
                                    state_is_tuple=True)
    

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 2019-09-17
      • 2022-09-27
      • 2020-07-18
      • 2018-02-11
      • 2020-05-24
      • 2021-05-27
      • 1970-01-01
      • 2017-12-26
      相关资源
      最近更新 更多