2016-04-23 14 views
5

पर केरास ध्यान परत मैं कैमरे का उपयोग कर रहा हूं 1.0.1 मैं एलएसटीएम के शीर्ष पर ध्यान परत जोड़ने की कोशिश कर रहा हूं। यह मेरे पास अभी तक है, लेकिन यह काम नहीं करता है।एलएसटीएम

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) 

नेटवर्क इनपुट अनुक्रम पर एक एलएसटीएम लागू करना चाहिए। फिर एलएसटीएम की प्रत्येक छिपी स्थिति पूरी तरह से जुड़े परत में इनपुट होनी चाहिए, जिस पर सॉफ़्टमैक्स लागू होता है। सॉफ्टमैक्स को प्रत्येक छिपे आयाम के लिए दोहराया जाता है और एलएसटीएम छिपे हुए राज्यों द्वारा गुणात्मक रूप से गुणा किया जाता है। फिर परिणामी वेक्टर औसत होना चाहिए।

संपादित करें: यह संकलित करता है, लेकिन मुझे यकीन नहीं है कि यह ऐसा करता है जो मुझे लगता है कि यह करना चाहिए।

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

हाय @siamii ध्यान नेटवर्क के साथ सफलता मिली? वर्तमान में मैं एक ही चीज़ की कोशिश कर रहा हूं .. – Nacho

+0

एलएसटीएम के शीर्ष पर ध्यान के इस कार्यान्वयन पर नज़र डालें: https://github.com/philipperemy/keras-attention-mechanism इसे आपके उदाहरण पर काम करना चाहिए। –

उत्तर

1

Here Keras साथ ध्यान LSTM के एक कार्यान्वयन है, और उसके instantiation का एक उदाहरण है। हालांकि, मैंने इसे खुद कोशिश नहीं की है।

संबंधित मुद्दे