外链论坛

 找回密码
 立即注册
搜索
查看: 45|回复: 2

【Python深度学习系列】网格搜索神经网络超参数:优化器

[复制链接]

2913

主题

144

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139591
发表于 2024-8-31 05:48:31 | 显示全部楼层 |阅读模式

这是我的第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深度学习系列】网格搜索神经网络超参数:优化器(案例+源码)

回复

使用道具 举报

2986

主题

2万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96066074
发表于 2024-8-31 09:25:26 | 显示全部楼层
楼主的文章非常有意义,提升了我的知识水平。
回复

使用道具 举报

3052

主题

2万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108887
发表于 2024-10-25 16:54:25 | 显示全部楼层
我深受你的启发,你的话语是我前进的动力。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-5 14:37 , Processed in 0.064273 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.