keras.backend的clear_session()方法没有清理拟合数据
The clear_session() method of keras.backend does not clean up the fitting data
我正在比较不同类型数据质量的拟合精度结果。 A "good data" 是特征值中没有任何 NA 的数据。 A "bad data" 是特征值中有 NA 的数据。 "bad data" 应该通过一些值修正来修复。作为价值修正,它可能会用零或平均值替换 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
数据查看拟合精度图:
之后,代码重置存储的模型并使用 "bad" 数据重新训练模型:
K.clear_session()
historyBad = model.fit(..., xTrainBad, ...)
查看拟合过程结果,基于historyBad
数据:
可以注意到,初始精度 > 0.7
,这意味着模型 "remembers" 之前的拟合。
为了比较,这是"bad"数据的独立拟合结果:
如何将模型重置为"initial"状态?
您使用 K.clear_session()
的方式不对,要获得一个随机初始化权重的模型,您应该删除旧模型(使用 del
关键字),然后继续创建一个新模型,并训练它。
您可以在每次试穿后使用 K.clear_session()
。
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
那样容易重置,并且需要事先清除图表。
Function/modules 使用:
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")
实例化一个新的同名模型对象还不够?
model = make_model()
我正在比较不同类型数据质量的拟合精度结果。 A "good data" 是特征值中没有任何 NA 的数据。 A "bad data" 是特征值中有 NA 的数据。 "bad data" 应该通过一些值修正来修复。作为价值修正,它可能会用零或平均值替换 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
数据查看拟合精度图:
之后,代码重置存储的模型并使用 "bad" 数据重新训练模型:
K.clear_session()
historyBad = model.fit(..., xTrainBad, ...)
查看拟合过程结果,基于historyBad
数据:
可以注意到,初始精度 > 0.7
,这意味着模型 "remembers" 之前的拟合。
为了比较,这是"bad"数据的独立拟合结果:
如何将模型重置为"initial"状态?
您使用 K.clear_session()
的方式不对,要获得一个随机初始化权重的模型,您应该删除旧模型(使用 del
关键字),然后继续创建一个新模型,并训练它。
您可以在每次试穿后使用 K.clear_session()
。
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
那样容易重置,并且需要事先清除图表。
Function/modules 使用:
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")
实例化一个新的同名模型对象还不够?
model = make_model()