Последовательная точность модели снижается и восстанавливается сразу после ее завершения. - PullRequest
0 голосов
/ 06 мая 2020

При обучении моделей в Tensorflow я испытал неизвестное (для меня) поведение, когда почти идеально обученная модель начинает постепенно терять свою точность, а затем снова восстанавливается. После небольшого поиска в Google я НЕ обнаружил подобной проблемы (в большинстве случаев точность падает и никогда не возвращается в нормальное состояние) .. В моем случае она восстанавливается сама. Вот о чем я говорю:

enter image description here

/*
Epoch 84 loss: 0.0232 - accuracy: 0.9867
Epoch 85- loss: 0.0199 - accuracy: 0.9883
Epoch 86 - loss: 0.0190 - accuracy: 0.9889
Epoch 87 - loss: 0.0189 - accuracy: 0.9891
Epoch 88 - loss: 0.0254 - accuracy: 0.9850
Epoch 89 - loss: 0.0232 - accuracy: 0.9866
Epoch 90 - loss: 0.0261 - accuracy: 0.9847
Epoch 91 - loss: 0.4627 - accuracy: 0.6175
Epoch 92 - loss: 0.6403 - accuracy: 0.4064
Epoch 93 - loss: 0.6114 - accuracy: 0.4623
Epoch 94 - loss: 0.5752 - accuracy: 0.5123
Epoch 95 - loss: 0.5476 - accuracy: 0.5388
Epoch 96 - loss: 0.5216 - accuracy: 0.5628
Epoch 97 - loss: 0.4773 - accuracy: 0.6068
Epoch 98 - loss: 0.4361 - accuracy: 0.6457
Epoch 99 - loss: 0.3836 - accuracy: 0.6937
Epoch 100 - loss: 0.3334 - accuracy: 0.7359
Epoch 101 - loss: 0.2721 - accuracy: 0.7878
Epoch 102 - loss: 0.2195 - accuracy: 0.8326
Epoch 103 - loss: 0.1685 - accuracy: 0.8740
Epoch 104 - loss: 0.1273 - accuracy: 0.9080
Epoch 105 - loss: 0.0930 - accuracy: 0.9347  
Epoch 106 - loss: 0.0669 - accuracy: 0.9552
Epoch 107 - loss: 0.0512 - accuracy: 0.9661  
*/
  • оранжевая кривая (с падением точности) обучается с использованием модели :

    model = Sequential()
    
    model.add(LSTM(512, input_shape=(in_shape_1, in_shape_2), return_sequences=True))
    model.add(LSTM(256, return_sequences=False))
    model.add(Dense(32, activation='relu'))
    model.add(Dropout(0.2))
    
    model.add(Dense(3, activation='softmax'))
    model.compile(
        loss='categorical_crossentropy',
        optimizer='Adam',
        metrics=['accuracy'],
    )
    
  • синяя кривая (без капель) обучается с помощью:

    model = Sequential()
    
    model.add(LSTM(512, input_shape=(in_shape_1, in_shape_2), return_sequences=True, dropout=0.2))
    model.add(LSTM(256, return_sequences=False, dropout=0.15))
    
    model.add(Dense(3, activation='softmax'))
    model.compile(
        loss='categorical_crossentropy',
        optimizer='Adam',
        metrics=['accuracy'],
    )
    

Синяя кривая для сравнения, что я ожидаю выглядела бы «нормальная» тренировка, но у нее худшая производительность. Не знаю, имеет ли это значение, но несколько слов о данных обучения. Это исторические данные об акциях. каждый набор данных поезда представляет 21 день состояний, и есть 7 состояний каждый день (80000, 21, 7), и результат может быть одним из 3 действий: покупка / продажа / удержание. (80000, 3)

Может ли кто-нибудь объяснить, как можно объяснить и смягчить снижение точности?

...