【问题标题】:Probable issue with LSTM in lasagne千层面中 LSTM 的可能问题
【发布时间】:2016-02-25 11:01:49
【问题描述】:

使用教程中给出的 LSTM 的简单构造函数,以及维度为 [,,1] 的输入,人们会期望看到形状为 [, em>,num_units]。 但不管在构造过程中传递了多少个 num_units,输出与输入的形状相同。

以下是复制此问题的最小代码...

    import lasagne
    import theano
    import theano.tensor as T
    import numpy as np

    num_batches= 20
    sequence_length= 100
    data_dim= 1
    train_data_3= np.random.rand(num_batches,sequence_length,data_dim).astype(theano.config.floatX)

    #As in the tutorial
    forget_gate = lasagne.layers.Gate(b=lasagne.init.Constant(5.0))
    l_lstm = lasagne.layers.LSTMLayer(
                                     (num_batches,sequence_length, data_dim), 
                                     num_units=8,
                                     forgetgate=forget_gate
                                     )

    lstm_in= T.tensor3(name='x', dtype=theano.config.floatX)

    lstm_out = lasagne.layers.get_output(l_lstm, {l_lstm:lstm_in})
    f = theano.function([lstm_in], lstm_out)
    lstm_output_np= f(train_data_3)

    lstm_output_np.shape
    #= (20, 100, 1)

不合格的 LSTM(我的意思是在其默认模式下)应该为每个单元生成一个输出,对吗? 代码在 kaixhin 的 cuda lasagne docker 镜像 docker image 上运行 是什么赋予了? 谢谢!

【问题讨论】:

    标签: machine-learning lstm lasagne


    【解决方案1】:

    你可以通过使用 lasagne.layers.InputLayer 来解决这个问题

    import lasagne
    import theano
    import theano.tensor as T
    import numpy as np
    
    num_batches= 20
    sequence_length= 100 
    data_dim= 1
    train_data_3= np.random.rand(num_batches,sequence_length,data_dim).astype(theano.config.floatX)
    
    #As in the tutorial
    forget_gate = lasagne.layers.Gate(b=lasagne.init.Constant(5.0))
    input_layer = lasagne.layers.InputLayer(shape=(num_batches, # <-- change
                  sequence_length, data_dim),)  # <-- change
    l_lstm = lasagne.layers.LSTMLayer(input_layer,  # <-- change
                                     num_units=8,
                                     forgetgate=forget_gate
                                     )
    
    lstm_in= T.tensor3(name='x', dtype=theano.config.floatX)
    
    lstm_out = lasagne.layers.get_output(l_lstm, lstm_in)  # <-- change
    f = theano.function([lstm_in], lstm_out)
    lstm_output_np= f(train_data_3)
    
    print lstm_output_np.shape
    

    如果您将输入输入到 input_layer 中,它就不再模棱两可了,因此您甚至不需要指定输入应该去哪里。直接指定一个shape并将tensor3添加到LSTM中是行不通的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2023-03-22
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多