0

ATIS データセットを分類するための LSTM モデルを構築しようとしています。

未定義のサイズ N の文から、コンテキスト ウィンドウの単語埋め込み行列を生成します。それが私のモデルを養うために必要なものですが、そうする方法がわかりません。

入力レイヤーを次のように定義すると:

def build_lstm(input_var=None):
    l_in = lasagne.layers.InputLayer(shape=(None, 1, None, None), input_var=input_var)
    l_hid = l_lstm = lasagne.layers.LSTMLayer(l_in, num_units=300)
    l_out = lasagne.layers.DenseLayer(l_hid, num_units=127, nonlinearity=lasagne.nonlinearities.softmax)

return l_out

私は得る:

TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'

l_in 宣言で入力形状を定義すると、次のように機能します。

l_in = lasagne.layers.InputLayer(shape=(None, 1, 30, 30), input_var=input_var)

ポイントは、各文のサイズが異なるため、コンテキスト ウィンドウの単語埋め込み行列の形状が異なることです。私に何ができる?

4

1 に答える 1

0

Lasagne/Theano が Tensor の初期化を処理する方法のため、単純に を指定することはできません(None, 1, None, None)。すでにわかっているように、サイズを指定する必要があります。実際、この例に見られるように、LSTMLayers は size の入力を期待しているようです(batch size, SEQ_LENGTH, num_features)

私が理解しているように、あなたの選択肢は次のとおりです。

  1. 最大シーケンス長を選択し、バッチを 0 でパディングします (または、バッチ内のすべての文が同じシーケンス長を持つバッチにバッチをバケット化します)。
  2. バッチ サイズを 1 にすると、シーケンスの長さを現在の文 (つまり、バッチ) のサイズに変更できます。

その他の関連リンク:

https://groups.google.com/forum/#!msg/lasagne-users/9nMD5VJPLXA/sNzqxON_DwAJ https://www.reddit.com/r/MachineLearning/comments/3dqdqr/keras_lstm_limitations/

于 2016-03-07T00:02:24.310 に答える