Потеря NaN и точность 0 с самого начала: Encoder Decoder Model Keras

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

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

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

(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)

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

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

Эпоха 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

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


person Shreyansh Chordia    schedule 21.06.2020    source источник
comment
добавить минимальный воспроизводимый пример с функцией компиляции, фиктивными данными и т. д.   -  person Zabir Al Nazi    schedule 21.06.2020
comment
Спасибо тебе за это. При тщательной оценке я обнаружил проблему   -  person Shreyansh Chordia    schedule 23.06.2020


Ответы (1)


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

person Shreyansh Chordia    schedule 23.06.2020