Разница между двумя типами структуры кодера-декодера LSTM в Keras - PullRequest
0 голосов
/ 08 февраля 2019

Недавно я видел два разных типа настройки кодера-декодера в Керасе.Они оба используются для генерации последовательностей.Но я не уверен, какой из них более эффективен (или понимаю, какой сценарий более эффективен).Так что любое предложение поможет.

Первая модель LSTM кодера-декодера принадлежит Джейсону Браунли (Jason Brownlee) из machinelearningmastery, вторая - из книги Natural Language Processing in Action

def jason_brownlee_model():
 model = Sequential()
 model.add(LSTM(75, input_shape=(X_train.shape[1], X_train.shape[2])))
 model.add(RepeatVector(Y_train.shape[1]))
 model.add(LSTM(50, return_sequences=True))
 model.add(TimeDistributed(Dense(X_train.shape[2], activation='softmax')))
 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
 model.summary()
 model.fit(X_train, Y_train, epochs=10, batch_size=32)
 return model


def nlp_in_action_model():
 encoder_inputs = Input(shape=(None, X.shape[2]))
 encoder = LSTM(75, return_state=True)
 encoder_outputs, state_h, state_c = encoder(encoder_inputs)
 encoder_states = [state_h, state_c]
 decoder_inputs = Input(shape=(None, Y.shape[2]))
 decoder_lstm = LSTM(75, return_sequences=True, return_state=True)
 decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states)
 decoder_dense = Dense(Y_target.shape[2], activation='softmax')
 decoder_outputs = decoder_dense(decoder_outputs)
 model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
 model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])
 model.fit([X, Y], 
      Y_target, 
      batch_size=16, 
      epochs=5, validation_split=0.1)

точность очень похожа.Однако вторая модель требует трех разных входных данных, X, Y_target и Y. Вторая модель также требует подачи возвращаемого состояния непосредственно в декодер, в то время как первая модель просто использует оболочку TimeDistributed для продолжения генерации символов.

...