Обучение в режиме логического вывода в модели seq-to-seq - PullRequest
0 голосов
/ 09 февраля 2020

Это, по-видимому, код для модели seq2seq со встраиванием, который я написал

    encoder_inputs = Input(shape=(MAX_LEN, ), dtype='int32',)
    encoder_embedding = embed_layer(encoder_inputs)
    encoder_LSTM = LSTM(HIDDEN_DIM, return_state=True)
    encoder_outputs, state_h, state_c = encoder_LSTM(encoder_embedding)
    encoder_states = [state_h, state_c]
    decoder_inputs = Input(shape=(MAX_LEN, ))
    decoder_embedding = embed_layer(decoder_inputs)
    decoder_LSTM = LSTM(HIDDEN_DIM, return_state=True, return_sequences=True)
    decoder_outputs, _, _ = decoder_LSTM(
        decoder_embedding, initial_state=encoder_states)
    outputs = TimeDistributed(
        Dense(VOCAB_SIZE, activation='softmax'))(decoder_outputs)
    model = Model([encoder_inputs, decoder_inputs], outputs)

    # defining inference model
    encoder_model = Model(encoder_inputs, encoder_states)
    decoder_state_input_h = Input(shape=(None,))
    decoder_state_input_c = Input(shape=(None,))
    decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
    decoder_outputs, state_h, state_c = decoder_LSTM(
        decoder_embedding, initial_state=decoder_states_inputs)
    decoder_states = [state_h, state_c]
    outputs = TimeDistributed(
        Dense(VOCAB_SIZE, activation='softmax'))(decoder_outputs)
    decoder_model = Model(
        [decoder_inputs] + decoder_states_inputs, [outputs] + decoder_states)
    return model, encoder_model, decoder_model

мы используем режим вывода для предсказаний, в частности, модели кодера и декодера, но я не уверен, где происходит обучение для кодер и декодер?

Редактировать 1

Код построен на: https://keras.io/examples/lstm_seq2seq/, с добавленным слоем внедрения и плотным слоем с распределением по времени. для получения дополнительной информации о выпуске: github repo

1 Ответ

1 голос
/ 09 февраля 2020

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

Если Вы внимательно посмотрите на предоставленную ссылку, там есть раздел, где обучается модель.

# Run training
model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
          batch_size=batch_size,
          epochs=epochs,
          validation_split=0.2)

Редактировать: из комментариев

Если вы посмотрите более внимательно, «новая» модель, которую вы Определяются после того, как подгонка состоит из слоев, которые уже были обучены на предыдущем шаге. т.е. модель (encoder_inputs, encoder_states) и encoder_inputs и encoder_states использовались во время первоначального обучения, вы просто перепаковываете их.

...