运行交叉验证时Keras回调
我已经读到,当您还想使用模型回调时,您不能使用Keras进行交叉验证,但后来证明这毕竟是可能的。然而,我很难把它融入到我的环境中 为了更详细地探讨这一点,我将遵循,并使用 这是一个三类分类问题,我正试图使用多层感知器(目前只有一层用于测试)。我现在的目标是在模型回调中工作,这样我就可以保存最佳模型的权重。下面,我在我的运行交叉验证时Keras回调,keras,Keras,我已经读到,当您还想使用模型回调时,您不能使用Keras进行交叉验证,但后来证明这毕竟是可能的。然而,我很难把它融入到我的环境中 为了更详细地探讨这一点,我将遵循,并使用 这是一个三类分类问题,我正试图使用多层感知器(目前只有一层用于测试)。我现在的目标是在模型回调中工作,这样我就可以保存最佳模型的权重。下面,我在我的network\u mlp一节中尝试这样做。为了说明模型在没有回调的情况下工作,我还包括network\u mlp\u no\u回调 您应该能够将其复制/粘贴到python会话中并
network\u mlp
一节中尝试这样做。为了说明模型在没有回调的情况下工作,我还包括network\u mlp\u no\u回调
您应该能够将其复制/粘贴到python会话中并运行它,没有问题。要复制我看到的错误,请取消注释最后一行
错误:RuntimeError:无法克隆对象,因为构造函数似乎没有设置参数回调
代码:第一节读取数据;第二个是带有回调的模型,它不起作用;第三个是没有回调的模型,它可以工作(提供上下文)
问题:如何将模型回调合并到KerasClassifier中?该解决方案与您引用的另一个答案非常接近,但略有不同,因为它们使用多个估计值,而您只有一个。通过将
fit_params={'callbacks':callbacks_list}
添加到cross_val_score
调用中,从estimator
初始化中删除回调列表,并将save_best_only
更改为False
,我可以使检查点工作
所以现在network\u mlp
中的代码小节如下所示:
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=False, mode='max')
callbacks_list = [checkpoint]
estimator = KerasClassifier(build_fn=mlp_model, epochs=epochs, batch_size=b_size, verbose=0)
kfold = KFold(n_splits=10, shuffle=True, random_state=7)
results = cross_val_score(estimator, X, Y, cv=kfold, fit_params={'callbacks': callbacks_list})
save_best_only=False
是必需的,因为您没有为神经网络设置验证拆分,因此val_acc
不可用。如果要使用验证子拆分,例如,可以将估计器初始化更改为:
estimator = KerasClassifier(build_fn=mlp_model, epochs=epochs, batch_size=b_size, verbose=0, validation_split=.25)
祝你好运
estimator = KerasClassifier(build_fn=mlp_model, epochs=epochs, batch_size=b_size, verbose=0, validation_split=.25)