Потеря NaN и точность 0 с самого начала: Encoder Decoder Model Keras - PullRequest
0 голосов
/ 21 июня 2020

Я сделал модель декодера кодировщика с использованием фреймворка Keras для создания чат-бота. Я не могу найти никаких проблем с моей моделью, но при обучении ПОТЕРЯ составляет nan с самой первой эпохи, и точность остается нулевой.

Я пробовал код для разных размеров пакетов, разных скоростей обучения, разных оптимизаторов , но нет даже небольшого изменения выходных значений. Я даже попробовал обрезку градиента и регуляризацию, но никаких признаков улучшения не было. Результат, который дает модель, является полностью случайным.

Код принимает входные данные формы:

(BATCH, MAX_LENGTH) для ввода кодера -> Преобразовано в (BATCH, MAX_LENGTH, EMB_SIZE) путем внедрения слоя

(BATCH, MAX_LENGTH) для ввода декодера -> Преобразовано в (BATCH, MAX_LENGTH, EMB_SIZE) путем внедрения слоя

Форма вывода:

(BATCH, MAX_LENGTH, 1) для цели декодера (следовательно, потеря, которую я использую, это 'sparse_categorical_crossentropy')

Вот код моей модели:

# Define an input sequence and process it.
encoder_inputs = Input(name='encoder_input', shape=(None,))
encoder_embedding = Embedding(name='encoder_emb', input_dim=VOCAB_SIZE,
                              output_dim=EMB_SIZE,
                              weights=[embedding_matrix],
                              trainable=False,
                              input_length=MAX_LENGTH)(encoder_inputs)
encoder = LSTM(HIDDEN_DIM, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_embedding)
# We discard `encoder_outputs` and only keep the states.
encoder_states = [state_h, state_c]

# Set up the decoder, using `encoder_states` as initial state.
decoder_inputs = Input(name='decoder_input', shape=(None, ))
decoder_embedding = Embedding(name='decoder_emb', input_dim=VOCAB_SIZE,
                              output_dim=EMB_SIZE,
                              weights=[embedding_matrix],
                              trainable=False,
                              input_length=MAX_LENGTH)(decoder_inputs)
# We set up our decoder to return full output sequences,
# and to return internal states as well. We don't use the 
# return states in the training model, but we will use them in inference.
decoder_lstm = LSTM(HIDDEN_DIM, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_embedding,
                                     initial_state=encoder_states)
decoder_dense = TimeDistributed(Dense(VOCAB_SIZE, activation='softmax'))

decoder_outputs = decoder_dense(decoder_outputs)

# Define the model that will turn
# `encoder_input_data` & `decoder_input_data` into `decoder_target_data`
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)

Слово embeddings (embedding_matrix) разработано с использованием встраивания GloVe.

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

Epoch 1/100 1329/1329 [== ============================] - 1 с 868 мкс / шаг - потеря: нан - точность: 4,7655e-04

Эпоха 2/100 1329/1329 [==============================] - 0s 353us / step - потеря: nan - точность: 4,7655e-04

Эпоха 3/100 1329/1329 [===================== =========] - 0 с 345 мкс / шаг - потеря: нан - точность: 4,7655e-04

Эпоха 4/100 1329/1329 [========== ====================] - 0s 354us / step - потеря: nan - точность: 4.7655e-04

Epoch 5/100 1329/1329 [==============================] - 0 с 349 мкс / шаг - потеря: нан - точность: 4,7655e-04

1 Ответ

0 голосов
/ 23 июня 2020

Проблема была в моих данных. Модель идеальная!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...