2016-04-23 44 views
5

Keras 1.0.1 kullanıyorum. Bir LSTM'nin üstüne bir dikkat katmanı eklemeye çalışıyorum. Şimdiye kadar sahip olduğum şey bu, ama işe yaramıyor.LSTM üzerindeki Keras dikkat katmanı

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) 

Ağ, giriş dizisi üzerinde bir LSTM uygulamalıdır. Sonra, LSTM'nin her bir gizli durumu, üzerine bir Softmax uygulamasının uygulandığı tam bağlantılı bir tabakaya girilmelidir. Softmax, her bir gizli boyut için çoğaltılır ve LSTM gizli durumları ile öğeli olarak çarpılır. Daha sonra ortaya çıkan vektörün ortalaması alınmalıdır.

EDIT: Bu derleme, ancak yapması gerektiğini düşündüğüm şeyi yapıp yapmadığından emin değilim.

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

Merhaba @siamii, dikkat ağında başarılı oldu mu? Şu anda aynı şeyi deniyorum .. – Nacho

+0

Bir LSTM üzerine dikkatin bu uygulamasına bir göz atın: https://github.com/philipperemy/keras-attention-mechanism Örnek üzerinde çalışmalı. –

cevap