У меня есть стандартная двунаправленная модель LSTM, построенная с использованием керасов, ничего сложного, только стопка слоев:
======================================================================== embedding_1 (Embedding_1) (None, 1697, 300) 9776100 _________________________________________________________________ bidirectional_1 (двунаправленный (None, 1697, 150) 225600 _________________________________________________________________ bidirectional_2 (двунаправленный (None, 1697, 60) 43440 _________________________________________________________________ bidirectional_3 (двунаправленный (None) 1697) ________________(Нет, 67880) 0 _________________________________________________________________ density_1 (Плотный) (Нет, 5) 339405
Кажется, что моя потеря обычно уменьшается, но это не относится к
11800/13500 [=========================> ....] - ETA: 2:16 - потеря: 107.6926 - согласно: 0.201012000 /13500 [=========================> ....] - ETA: 2:00 - потеря: 106.0187 - acc: 0.2019 12200/13500[==========================> ...] - ETA: 1:44 - убыток: 104.4009 - акк: 0.2024 12400/13500 [==========================> ...] - ETA: 1:28 - убыток: 102,8412 - акк: 0,2029 12600/13500 [===========================> ..] - ETA: 1:12 - убыток: 101,3140 - акк: 0,2021 12800/13500 [===========================> ..] - ETA: 56 с - убыток: 99,8337 - акк: 0,2021 13000/13500 [===========================> ..] - ETA: 40 с - потери: 98.4028 - в соответствии с 0.2022 13200/13500 [============================>.] - ETA: 24 с - убыток: 97.0180 - акк: 0.2030 13400/13500 [============================>.] - ETA: 8 с - потеря: 95,6736 - акк: 0,2031 13500/13500 [==============================] - 1141 с 85 мс / шаг - потеря: 94,9990 - соотв: 0,2029 - val_loss: 4,7779 - val_acc: 0,2193
, что является добрымстранно, мой набор данных сбалансирован для каждого класса, и я не использую никакой пользовательской функции потерь, мой оптимизатор - стандартный SGD (также пробовал Адам, тот жерезультаты), и мой размер пакета составляет 200
РЕДАКТИРОВАТЬ: не берите в голову эту часть ...
Кроме того, я попытался добавить пользовательские метрики, результаты еще более странные:
print("Epoch: {} end".format(epoch))
val_predict = np.asarray(self.model.predict(self.validation_data[0]))
print("Predictions: ", val_predict)
val_predict = np.argmax(val_predict, axis=1)
val_targ = self.validation_data[1]
val_targ = np.argmax(val_targ, axis=1)
print("Val data: {}, Val pre: {}, val_targ: {}".format(self.validation_data[0][0:100], val_predict[0:10],
val_targ[0:10]))
я получаю следующий результат:
Предсказания: [[0,1997815 0,19978242 0,20011796 0,19970864 0,20060949]
[0,19989796 0,20036548 0,19994123 0,19979696 0,19999835] [0,20089898 0,19889246 0,19993879 0,19909698 0,20117281] ... [0,199488160,20006524 0,19998378 0,2000029 0,20045996] [0,1996356 0,19995351 0,19997446 0,20012334 0,220031306]
[0,20026998 0,19984405 0,120024066 0,19988723 0,19975808]]
Val pre: [4 1 4 2 2] 4 * 4 2 2 4 4 4 4 2 2 4 4 4 2 2 2 4 4 4 2 2 4 4 2 4 4 2 2 4 4 2 2 4 4 4
Если вы внимательно посмотрите на последнюю строку, softmax должен вывести «0» в качестве прогнозируемого класса, а не 4, кажется, что класс «0» обычно пропускается.
Любая идея, что происходитна?Спасибо