Python 交叉验证:无法使用clear_session()清除模型以训练新模型

Python 交叉验证:无法使用clear_session()清除模型以训练新模型,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我正在尝试评估一个命名实体识别任务的交叉验证培训。问题是keras模型未正确清除,无法执行交叉验证的其他迭代 我尝试了stack、github或论坛中建议的几种解决方案来清除模型,但都不起作用。我将集中讨论这两个似乎接近规范解的问题 第一个:我在交叉验证的循环外创建模型(架构+编译),但在循环内调用keras.backend.clear_session()。我收到错误:“在图中找不到feed\u设备或fetch\u设备中指定的tensorflow.python.framework.errors\

我正在尝试评估一个命名实体识别任务的交叉验证培训。问题是keras模型未正确清除,无法执行交叉验证的其他迭代

我尝试了stack、github或论坛中建议的几种解决方案来清除模型,但都不起作用。我将集中讨论这两个似乎接近规范解的问题

第一个:我在交叉验证的循环外创建模型(架构+编译),但在循环内调用keras.backend.clear_session()。我收到错误:“在图中找不到feed\u设备或fetch\u设备中指定的tensorflow.python.framework.errors\u impl.InvalidArgumentError:Tensor words\u输入:0”

第二个:我在循环内创建模型,并在循环内调用keras.backend.clear_session()。我得到了错误:“图中重复节点名称:'training/Nadam/Pow'”

很抱歉,代码可能不够清晰,但出于隐私问题,我无法显示代码

第一

kf=KFold(折叠,洗牌=True)
模型=创建模型(…)
对于枚举(kf.split(…)中的i,(train_idx,test_idx):
...
系列批次,系列批次长度=创建批次(系列集合)
测试批,测试批=创建批(测试集)
模型,uu,uu=培训(模型,…,时代=时代)
清除会话()
第二

kf=KFold(折叠,洗牌=True)
对于枚举(kf.split(…)中的i,(train_idx,test_idx):
模型=创建模型(…)
...
系列批次,系列批次长度=创建批次(系列集合)
测试批,测试批=创建批(测试集)
模型,uu,uu=培训(模型,…,时代=时代)
清除会话()
在create_model()中,我们定义了层的体系结构和调用编译(…)


我确实希望在kfold的每次迭代中使用清晰的模型执行交叉验证。另一件需要提及的事情是,我试图在每次迭代开始时设置保存的初始权重,但当我处理数百个历元时,似乎存在存储问题,因为据我所知,keras在每个历元创建节点。在这样做时,如果我使用少量的历元,它在整个kfold中运行良好,但当我在100个历元上执行时,训练性能在第二次迭代后保持在0 F1分数。

您还必须在清除季节之前删除模型

from keras import backend as K
del model
K.clear_session()
gc.collect()

谢谢你的快速回答。我尝试了你的解决方案(在发布最初的问题之前,我试图删除模型,但我没有调用垃圾收集器,我仍然得到了错误),它不起作用,我再次得到了“图中重复的节点名称:'training/Nadam/Pow'”。但我发现了问题所在,是在调用我没有显示的函数时,因为我传入了参数optimizer Nadam(),它在create_model()之外创建了这个参数。这就是为什么它提到优化器节点已经存在于图中。是这样吗?虽然非常感谢,但现在它在一个简单的例子中起作用。今晚我要试穿一下大模型:)