栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python实现简易随机搜索算法(LSTM模型调参)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python实现简易随机搜索算法(LSTM模型调参)

使用随机搜索算法寻找LSTM模型最优超超参数组合,以改善模型的性能和提高模型的预测精度。选取模型训练次数、模型隐含层的神经元个数和序列长度作为超参数;根据实际模型设置三个超参数的范围。每次从超参数空间(第一次从超参数全空间随机抽取,第二次之后从子空间随机抽取)中抽取27组超参数组合进行搜索,最后将模型的搜索结果保存到EXCEL文件中。

import openpyxl as op
from random import choice
from random import sample
import pandas as pd
import numpy as np
from keras.applications.densenet import layers
from keras.losses import mean_absolute_error
from sklearn.metrics import r2_score
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
from keras.models import Sequential
import warnings
warnings.filterwarnings('ignore')


# 设置超参数范围
epoch_list_all=[*range(20, 100, 1)] # 训练次数
neure_list_all=[*range(10, 100, 1)] # 神经元个数
seq_len_list_all=[*range(5, 40, 1)] # 序列长度
# print("epoch=",choice(epoch_list),"neure=",choice(neure_list),"seq_len=",choice(seq_len_list))

# 初始化存放三个超参数的列表
List=[]

# 存放每次搜索中超参数组合
# 存放每次搜索所有的超参数组合
CCS_all=[]
# 存放每次搜索中最优的超参数组合
CCS_best=[]

# 最优超参数组合
epoch_best=None
neure_best=None
seq_len_best=None
# 初始化最优(小)的平均绝对误差
MAE_best=100

# 更新最优超参数列表函数
def Change_num(index_X,X_all_list):
    if(3<=index_X<=(len(X_all_list)-3)):
        list_X=X_all_list[index_X-3:index_X+2]
    elif(index_X<3):
        list_X=X_all_list[:5]
    else:
        list_X=X_all_list[-5:]
    print("list_X=",list_X)
    return list_X

# 随机抽取27组进行训练
for i in range(0,27):
    epoch=choice(epoch_list_all)
    neure=choice(neure_list_all)
    seq_len=choice(seq_len_list_all)
    # print("epoch=",epoch,"nerue=",neure,"seq_len=",seq_len)
    List.append(1)
    List[i]=[epoch,neure,seq_len]
print(List)

leean=2
# 开始随机搜索搜索
for f in range(6):
    # 模型评价指标指标MAE列表初始化
    MAE_list = []
    for s in range(27):
        # LSTM模型(将构建的LSTM模型放入循环内)
        # 将模型中的训练次数改为List[s][0]   神经元个数改为List[s][1]   序列长度改为List[s][2]

        # 将每组超参数所对应的MAE值存放于MAE_list列表中
        MAE_list.append(1)
        # Pred为预测数据,Real为真实数据
        MAE_list[s]=np.sum(np.absolute(Pred-Real))/len(Real)
        # 将每次搜索的所有超参数组合以及对应的MAE值存入excel文件
        bg = op.load_workbook(r"Excel文件路径")  # 应先将excel文件放入到工作目录下
        sheet = bg["Sheet1"]  # “Sheet1”表示将数据写入到excel文件的sheet1下
        sheet.cell(leean,1,List[s][0])  # 训练次数
        sheet.cell(leean, 2, List[s][1])  # 神经元个数
        sheet.cell(leean, 3, List[s][2])  # 序列长度
        sheet.cell(leean, 4, MAE_list[s])  # MAE
        bg.save("Excel文件路径")  # 对文件进行保存
        leean=leean+1
    # 对比各组超参数组合对应的MAE,找出最小MAE所对应的较优超参数组合
    indexs=MAE_list.index(min(MAE_list))
    # 找出较优超参数组合各个超参数
    epochs,neures,seq_lens=List[indexs][0],List[indexs][1],List[indexs][2]
    CCS_best.append(1)
    CCS_best[f]=[epochs,neures,seq_lens]

    # 缓存较优超参数组合
    if(MAE_list[indexs]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934151.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号