Обучение в режиме логического вывода в модели seq-to-seq

Это, видимо, код для модели 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 РЕПО

Всего 1 ответ


Кодировщик и декодер обучаются одновременно, или, точнее, обучается модель, составленная из этих двух, которая, в свою очередь, обучает их обоих (это не 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 использовались во время первоначального обучения, вы просто перепаковываете их.


Есть идеи?

10000