Как решить потерю: нан & точность: 0,0000e + 00 в задаче LSTM? Tensorflow 2.x - PullRequest
1 голос
/ 13 марта 2020

Я работаю в LSTM проблеме . Я пытаюсь предсказать тип личности MBTI (тест Майерса-Бриггса) на основе текстовой классификации (есть 16 типов личности ).

У меня есть CSV-файл , который был предварительно обработан: Стоп-слова были удалены, он был лемматизирован, размечен, упорядочен и дополнен . Файл не имеет значений NaN, а текстовая последовательность имеет только целые числа .

Однако проблема возникает при попытке обучить полученную модель:

loss: nan - accuracy: 0.0000e+00 - val_loss: nan - val_accuracy: 0.0000e+00

enter image description here

training model

enter image description here


По запросу: как выглядят данные и метки x, y с результатами

print(validation_label_seq)
[[ 5]
 [10]
 [ 4]
 [ 4]
 [15]
 [12]
 [ 1]...]

print(validation_padded[0])
maxlen = 240
array([  23,  353,  147,  677,    1,    1,  409,   10,  845, 1530,    1,
        103,  107,  998,  117, 1389,   25,    1,   28, 1889,  165,    1,
       1520,   49,  718,   65,   55,   34,    0,    0,    0,    0,    0,
          0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,...], dtype=int32)
print(train_label_seq)
[[ 8]
 [ 9]
 [ 3]
 [ 7]
 [ 4]
 [10]
 [15]
 [11]...]

print(train_data_padded[0])
maxlen = 240
array([ 19, 301, 133, 302, 562, 133,  28, 563, 895, 896, 897, 118,  99,
       564, 397,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0...], dtype=int32)

results = model.evaluate(validation_padded, validation_label_seq)

test = validation_padded[10]
predict = model.predict_classes([test])
print(predict[1])

59/59 [==============================] - 0s 1ms/sample - loss: nan - accuracy: 0.0000e+00
[0]
/tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/engine/sequential.py:342: RuntimeWarning: invalid value encountered in greater
  return (proba > 0.5).astype('int32')

print(predict)

array([[0],
       [0],
       ...
       [0],
       [0]], dtype=int32)

Что я пробовал?

  • Я уже пытался перейти на другие оптимизаторы
  • Уменьшить размер пакета
  • Проверить ошибки значений в кадре данных и в последовательности (данные поезда и проверки).

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

1 output:
INTP: 89%

16 outputs:
ENTP: 5% | INTP: 81% | INTJ: 1% | ...

Если вы хотите проверить, вот код: mbti personal

Фрейм данных: mbti_df

Будут рассмотрены любые предложения по улучшению вопроса

1 Ответ

1 голос
/ 13 марта 2020

Вы используете softmax в коде в качестве конечного результата. И это куча значений вероятности и проверьте, что вы сравниваете в этом коде. На этикетке закодированы цели. Они не совпадают и поэтому дают 0 точности. Я бы предложил изменить softmax o / p на правильную форму, чтобы сравнение с accuracy metri c давало правильный результат.

Пример:

soft max output [0.2, 0.8] Выход для другое [0 , 1]

Тогда будет несоответствие и пострадает точность.

...