如何使用 GridSearch 保存具有最佳参数的 Keras 模型

Posted

技术标签:

【中文标题】如何使用 GridSearch 保存具有最佳参数的 Keras 模型【英文标题】:How to save Keras model with best parameters using GridSearch 【发布时间】:2018-08-02 00:45:44 【问题描述】:

有什么方法可以保存完整的 Keras 模型以及使用 Gridsearch 获得的最佳参数。

我有以下 Keras 模型:

def create_model(init_mode='uniform'):
    n_x_new=train_selected_x.shape[1]

    model = Sequential()
    model.add(Dense(n_x_new, input_dim=n_x_new, kernel_initializer=init_mode, activation='sigmoid'))
    model.add(Dense(10, kernel_initializer=init_mode, activation='sigmoid'))
    model.add(Dropout(0.8))

    model.add(Dense(1, kernel_initializer=init_mode, activation='sigmoid'))


    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

    return model

seed = 7
np.random.seed(seed)


model = KerasClassifier(build_fn=create_model, epochs=30, batch_size=400, verbose=1)

init_mode = ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform']
param_grid = dict(init_mode=init_mode)
#cv = PredefinedSplit(test_fold=my_test_fold)
grid = GridSearchCV(estimator=model, param_grid=param_grid,scoring='roc_auc',cv = PredefinedSplit(test_fold=my_test_fold), n_jobs=1)
grid_result = grid.fit(np.concatenate((train_selected_x, test_selected_x), axis=0), np.concatenate((train_selected_y, test_selected_y), axis=0))



print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
    print("%f (%f) with: %r" % (mean, stdev, param))

我知道我可以使用callbackcheckpoint 方法,但是我不知道在我的原始代码中将这个方法所需的代码放在哪里。

我在研究时遇到的代码如下。

filepath="weights.best.hdf5"
    checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
    callbacks_list = [checkpoint]

【问题讨论】:

【参考方案1】:

环顾四周,似乎必须这么简单

classifier = KerasClassifier(build_fn=DNN, nb_epoch=32, batch_size=8, callbacks=[your_callback], verbose=1)

但这似乎也不起作用。 一个可能的解决方法来自给出的答案 - Can I send callbacks to a KerasClassifier?,这应该会有所帮助。

这是使用不同的通用工具的结果 没有特别考虑与所有可能的一起使用 配置。

另外,你可以参考这张票-How to pass callbacks to scikit_learn wrappers (e.g. KerasClassifier) #4278

希望对你有帮助!

【讨论】:

以上是关于如何使用 GridSearch 保存具有最佳参数的 Keras 模型的主要内容,如果未能解决你的问题,请参考以下文章

具有 PredefinedSplit 评分的 Sklearn GridSearch 与独立分类器不匹配

火炉炼AI机器学习017-使用GridSearch搜索最佳参数组合

如何绘制最佳参数对应的随机森林树

如何解释 GridSearch 的最佳分数?

与 RFECV 结合时如何在 Gridsearch 中使用“max_features”?

激活参数在 GridSearch 中不起作用