1

チュートリアルで示されているように、LSTM の単純なコンストラクターと次元 [ , ,1] の入力を使用すると、形状 [ , ,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 (つまり、デフォルト モード) は、ユニットごとに 1 つの出力を生成する必要があります。コードは kaixhin の cuda lasagne で実行されまし 。ありがとう !

4

1 に答える 1

0

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 にフィードすると、もはやあいまいではないため、入力がどこに行くべきかを指定する必要さえありません。シェイプを直接指定して tensor3 を LSTM に追加しても機能しません。

于 2016-03-18T23:38:37.777 に答える