keras.backend 的 clear_session() 方法没有清理拟合数据

Posted

技术标签:

【中文标题】keras.backend 的 clear_session() 方法没有清理拟合数据【英文标题】:The clear_session() method of keras.backend does not clean up the fitting data 【发布时间】:2020-02-15 14:59:12 【问题描述】:

我正在比较不同类型数据质量的拟合精度结果。 “好数据”是特征值中没有任何 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 数据:

之后,代码重置存储的模型并使用“坏”数据重新训练模型:

K.clear_session()

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

查看拟合过程结果,基于historyBad数据:

可以注意到,初始精度> 0.7,这意味着模型“记住”了之前的拟合。

为了比较,这是“坏”数据的独立拟合结果:

如何将模型重置为“初始”状态?

【问题讨论】:

【参考方案1】:

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 随机种子不像randomnumpy 那样容易重置,需要事先清除图表。


使用的功能/模块
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")

【讨论】:

对我不起作用。【参考方案2】:

您以错误的方式使用K.clear_session(),要获得具有随机初始化权重的模型,您应该删除旧模型(使用del 关键字),然后继续创建一个新模型,并对其进行训练.

您可以在每次拟合过程后使用K.clear_session()

【讨论】:

【参考方案3】:

实例化一个新的同名模型对象还不够?

model = make_model()

【讨论】:

以上是关于keras.backend 的 clear_session() 方法没有清理拟合数据的主要内容,如果未能解决你的问题,请参考以下文章

Python Keras module 'keras.backend' has no attribute 'image_data_format'

AttributeError:模块“tensorflow.python.keras.backend”没有属性“get_graph”

Google Colab 上的 Keras YoloV3,AttributeError: module 'keras.backend' has no attribute 'control_flow_o

keras.backend 的 clear_session() 方法没有清理拟合数据

AttributeError: module 'tensorflow.python.keras.backend' has no attribute 'get_graph'

keras 设置GPU使用率