2016-04-23 14 views
5

ケラス1.0.1を使用しています。LSTMの上にアテンションレイヤを追加しようとしています。これはこれまで私が持っていたものですが、うまくいきません。LSTM上のケアアテンションレイヤ

input_ = Input(shape=(input_length, input_dim)) 
lstm = GRU(self.HID_DIM, input_dim=input_dim, input_length = input_length, return_sequences=True)(input_) 
att = TimeDistributed(Dense(1)(lstm)) 
att = Reshape((-1, input_length))(att) 
att = Activation(activation="softmax")(att) 
att = RepeatVector(self.HID_DIM)(att) 
merge = Merge([att, lstm], "mul") 
hid = Merge("sum")(merge) 

last = Dense(self.HID_DIM, activation="relu")(hid) 

ネットワークは、入力シーケンスに対してLSTMを適用する必要があります。次に、LSTMの各隠れた状態を、Softmaxが適用されている完全に接続された層に入力する必要があります。 softmaxは隠れた次元ごとに複製され、LSTM隠れ状態と要素ごとに掛け合わされます。次に、結果のベクトルを平均化する必要があります。

EDIT:これはコンパイルされますが、私はそれがどうすべきかとは分かりません。

input_ = Input(shape=(input_length, input_dim)) 
lstm = GRU(self.HID_DIM, input_dim=input_dim, input_length = input_length, return_sequences=True)(input_) 
att = TimeDistributed(Dense(1))(lstm) 
att = Flatten()(att) 
att = Activation(activation="softmax")(att) 
att = RepeatVector(self.HID_DIM)(att) 
att = Permute((2,1))(att) 
mer = merge([att, lstm], "mul") 
hid = AveragePooling1D(pool_length=input_length)(mer) 
hid = Flatten()(hid) 
+0

こんにちは@サイアミが注目ネットワークで成功しましたか?現在、私は同じことをしようとしています。 – Nacho

+0

LSTMの上にこの注意の実装を見てください:https://github.com/philipperemy/keras-attention-mechanismあなたの例で動作するはずです。 –

答えて

1

Here注目KerasとLSTM、そのinstantiationの例の実装です。私はそれを自分で試していない。