记一次GridSearchCV在NN中的应用

本文介绍如何在Python/Keras中利用GridSearchCV进行神经网络超参数调优,通过KerasClassifier或KerasRegressor包装模型,实现与scikit-learn的无缝对接。文章详细讲解了创建模型函数、构建KerasClassifier实例及执行网格搜索的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,目的是想在python/keras中,使用Grid Search对神经网络超参数进行调参,即调用sklearn中的GridSearchCV函数。具体步骤可以参考:python/keras中用Grid Search对神经网络超参数进行调参

 2,其中核心为使用KerasClassifier或KerasRegressor类包装Keras model,从而使keras model适用于scikit-learn。

       要使用这些包装,必须定义一个函数,以便按顺序模式创建model并返回keras model。然后当构建KerasClassifier类时,把该函数的return value(即keras model)传递给build_fn参数。

def create_model(): 

    model = Sequential()

    ... 

    return model 

model = KerasClassifier(build_fn=create_model)

       其中KerasClassifier类的构造也可以使用新的参数,如下所示。

model = KerasClassifier(build_fn=create_model, nb_epoch=10)

3,一个简单的grid search搜索示例如下。

batch_size = [32, 64, 128, 256, 512, 1024]
epochs = [1, 5, 10, 20, 50, 100]

# train and find the best parameters
param_grid = dict(batch_size=batch_size, nb_epoch=epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=1)
grid_result = grid.fit(X_train, Y_train)

       其中首先需要提供超参数字典dict(),以便用来评价param_grid参数。

       其次默认选择acc作为优化的核心(score参数),但其他核心也可指定用于GridSearchCV构造函数的score参数。

       另外需要注意的是默认情况下网格搜索只使用一个线程(n_jobs=1)。但在GridSearchCV构造函数中,可以通过将 n_jobs参数设置为-1,则进程将使用计算机上的所有内核(适用于分布式环境)。

       最后默认使用3层交叉验证,即cv=3,也可以设置其他cv value。

       网格搜索的输出由grid.fit()返回。其中best_score_成员提供优化过程期间观察到的最好的评分, best_params_描述了已取得最佳结果的参数的组合。

4,关于GridSearchCV的参数含义还可以参考:GridSearchCV参数以及n_jobs参数解析

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值