这是我的第286篇原创文案。
1、引言
在深度学习中,超参数指的是在训练模型时需要手动设置的参数,它们一般不可经过训练数据自动学习得到。超参数的选取针对模型的性能至关重要,因此呢在进行深度学习实验时,超参数调优一般是一个重要的过程。平常的超参数包含: model.add()neurons(隐含层神经元数量)init_mode(初始权重办法)activation(激活函数)dropout(丢弃率)model.compile()loss(损失函数)optimizer(优化器)learning rate(学习率)momentum(动量)weight decay(权重衰减系数)model.fit()batch size(批量体积)epochs(迭代次数)
通常来讲,能够经过手动调优、网格搜索(Grid Search)、随机搜索(Random Search)、自动调参算法方式进行超参数调优。损失函数是用于衡量模型所作出的预测离真实值(Ground Truth)之间的偏离程度。一般,咱们都会用一种优化算法(优化器)最小化目的函数,例如常用的算法便是“梯度下降法”(Gradient Descent)。本文采用网格搜索选取优化器。
2、实现过程
2.1 准备数据
dataset: dataset = pd.read_csv("data.csv", header=None)
dataset = pd.DataFrame(dataset)
print(dataset)
2.2 数据划分# 切分数据为输入 X 和输出 Y
X = dataset.iloc[:,0:8]
Y = dataset.iloc[:,8]
# 为了复现,设置随机种子seed = 7
np.random.seed(seed)
random.set_seed(seed)2.3 创建模型
需要定义个网格的架构函数create_model def create_model():
# 创建模型
model = Sequential()
model.add(Dense(50, input_shape=(8, ), kernel_initializer=uniform, activation=relu))
model.add(Dropout(0.05))
model.add(Dense(1, kernel_initializer=uniform, activation=sigmoid))
# 编译模型
model.compile(loss=binary_crossentropy, optimizer=adam, metrics=[accuracy])
returnmodel
model = KerasClassifier(model=create_model, epochs=100, batch_size=80, verbose=0)这儿运用了scikeras库的KerasClassifier类来定义一个归类器,这儿因为KerasClassifier有定义优化器的参数optimizer,不需要自定义一个暗示丢优化器的参数。
2.4 定义网格搜索参数param_grid = {optimizer: [SGD, RMSprop, Adagrad, Adadelta, Adam, Adamax, Nadam]}param_grid是一个字典,key是超参数名叫作,这儿的名叫作必须要在KerasClassifier这个对象里面存在况且参数名要一致。value是key可取的值,亦便是要尝试的方法。
2.5 进行参数搜索from sklearn.model_selection import GridSearchCV
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid_result = grid.fit(X, Y)
运用sklearn里面的GridSearchCV类进行参数搜索,传入模型和网格参数。
2.6 总结搜索结果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]
formean, stdev, param in zip(means, stds, params):print("%f (%f) with: %r" % (mean, stdev, param))结果:
经过网格搜索,优化器的最优选取是Nadm。
作者简介: 读研时期发布6篇SCI数据算法关联论文,日前在某科研院从事数据算法关联科研工作,结合自己研究实践经历连续分享关于Python、数据分析、特征工程、设备学习、深度学习、人工智能系列基本知识与案例。关注gzh:数据杂坛,获取数据和源码学习更加多内容。
原文链接:【Python深度学习系列】网格搜索神经网络超参数:优化器(案例+源码)
|