Метод clear_session () в keras.backend не очищает данные подбора - PullRequest
2 голосов
/ 18 октября 2019

Я работаю над сравнением результатов точности подгонки для разных типов качества данных. «Хорошие данные» - это данные без каких-либо NA в значениях признаков. «Плохие данные» - это данные с NA в значениях признаков. «Плохие данные» должны быть исправлены путем некоторой коррекции значения. В качестве корректировки значения это может быть замена NA нулевым или средним значением.

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

Просмотрите упрощенный код:

from keras import backend as K
...

xTrainGood = ... # the good version of the xTrain data 

xTrainBad = ... #  the bad version of the xTrain data

...

model = Sequential()

model.add(...)

...

historyGood = model.fit(..., xTrainGood, ...) # fitting the model with 
                                              # the original data without
                                              # NA, zeroes, or the feature mean values

Просмотрите график точности подбора, основанный на historyGoodданные:

enter image description here

После этого код сбрасывает сохраненную модель и повторно обучает модель «плохими» данными:

K.clear_session()

historyBad = model.fit(..., xTrainBad, ...)

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

enter image description here

Как можно заметить, начальная точность > 0.7, что означает, что модель «запоминает» предыдущую настройку.

Для сравнения, это результаты автономной настройки «плохих» данных:

enter image description here

Как сбросить модель в «исходное» состояние?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

K.clear_session() недостаточно для сброса состояний и обеспечения воспроизводимости. Вам также необходимо:

  • Установить (и сбросить) случайные начальные числа
  • Сбросить график по умолчанию TensorFlow
  • Удалить предыдущую модель

Выполните код, приведенный ниже.

reset_seeds()
model = make_model() # example function to instantiate model
model.fit(x_good, y_good)

del model
K.clear_session()
tf.compat.v1.reset_default_graph()

reset_seeds()
model = make_model()
model.fit(x_bad, y_bad)

Обратите внимание, что если другие переменные ссылаются на модель, вы должны del их также - например, model = make_model(); model2 = model -> del model, model2 - иначе они могут сохраняться. Наконец, tf случайные начальные числа не так легко сбрасываются, как random или numpy, и требуют предварительной очистки графика.


Функция / модулиб :
import tensorflow as tf
import numpy as np
import random
import keras.backend as K

def reset_seeds():
    np.random.seed(1)
    random.seed(2)
    if tf.__version__[0] == '2':
        tf.random.set_seed(3)
    else:
        tf.set_random_seed(3)
    print("RANDOM SEEDS RESET")
0 голосов
/ 19 октября 2019

Вы используете K.clear_session() неправильно, чтобы получить модель со случайно инициализированными весами, вы должны удалить старую модель (используя ключевое слово del), а затем приступить к созданию новой модели и обучить ее.

Вы можете использовать K.clear_session() после каждой процедуры подгонки.

...