博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
探索大型神经网络智能调参(一):构建大规模BPNN
阅读量:7098 次
发布时间:2019-06-28

本文共 3198 字,大约阅读时间需要 10 分钟。

我们正在研究如何用更廉价、更高效、鲁棒性更好的方法对大宽度、大深度的神经网路进行调参(hidden layer的层数,每层layer的节点,epochs,batch_size)。

无论如何,先构建一个规模较大的神经网络,要保证训练的时间(即使使用GPU计算)。
此神经网络有9个隐含层,每层400个节点,1450401个trainable parameters,是一个预测类的后向反馈神经网络,建立feval值(用以量化某声学设备设计方案的好坏)和15个设计尺寸的函数关系。

1.导入依赖库

pandas用以处理矩阵数据,matplotlib用以可视化,keras用以训练后向反馈神经网络。

import pandas as pdimport matplotlib.pyplot as pltfrom keras.models import Sequentialfrom keras.layers.core import Dense,Dropout, Activationfrom keras.utils.vis_utils import plot_model

2.导入EXCEL文件中的数据

定义输入文件、输出文件、模型参数保存文件的目录;

读取excel数据,定义15个feature和1个Label;
截取前40000个example作为训练数据集。

inputfile = 'Dataset.xlsx'outputfile = 'output.xls'modelfile = 'modelweight.model'data = pd.read_excel(inputfile,index='index',sheetname=0)feature = ['l1','l2','l3','l4','l5',           'p1','p2','p3','p4','p5',           'h1','h2','h3','h4','h5']label = ['feval']data_train = data.loc[range(0,40000)].copy()

3.将数据归一化,提高训练效率

计算各个特征和标签的平均值和标准差,用来做线性变换将数据归一化,并转化为矩阵格式。

data_mean = data_train.mean()data_std = data_train.std()data_train = (data_train - data_mean)/data_stdx_train = data_train[feature].as_matrix()y_train = data_train[label].as_matrix()

4.建立深度学习模型

Sequential类的模型,输入层接受15个输入,输出到第一个隐藏层的400个神经元中,其后9个隐藏层都接受400个输入并产生400个输出。输入层和隐藏层都采用ReLu作为激活函数,Dropout概率都为1%。
采用均方根误差(mse)值作为loss value,优化器使用adam。
打印summary,并将结构图保存为png文件。

model = Sequential()model.add(Dense(400,input_dim=15,kernel_initializer="uniform"))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer="uniform"))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(400,input_dim=400,kernel_initializer='uniform'))model.add(Activation('relu'))model.add(Dropout(0.01))model.add(Dense(1,input_dim=400))model.compile(loss='mean_squared_error', optimizer='adam')print(model.summary())plot_model(model, to_file='bpnn_predict_model.png',show_shapes=True)

clipboard.png

5.训练模型

迭代200次,每一次批量梯度下降使用256个样本。

model.fit(x_train, y_train, epochs = 200, batch_size = 256)

最终loss值稳定在0.0035左右

clipboard.png

6.测试模型

将data数据归一化后使用训练的模型预测tl值,并保存到excel文件中。

x = ((data[feature] - data_mean[feature])/data_std[feature]).as_matrix()data[u'feval_pred'] = model.predict(x) * data_std['feval'] + data_mean['feval']data.to_excel(outputfile)

打印预测值(除去训练集样本)并与真实值进行对比。

plt.xlim(6000, 16000)plt.ylim(6000, 16000)plt.gca().set_aspect(1)plt.scatter(data['feval_pred'][40000:],data['feval'][40000:],s=1, c='b', marker='.')plt.show()

clipboard.png

转载地址:http://kdeql.baihongyu.com/

你可能感兴趣的文章
【操作系统】实验三 进程调度模拟程序
查看>>
LR分析法
查看>>
js冒泡排序
查看>>
创建Android本地repo
查看>>
<context-param>与<init-param>的区别与作用
查看>>
师傅赠言
查看>>
<script type="javascript"> 与<script language="javascript"> 有什么区别啊
查看>>
一些记不住的问题
查看>>
利用zabbix监控ogg进程(Linux平台下)
查看>>
网页设计常用的图片格局及其用法
查看>>
MFC中编辑框数字限制范围
查看>>
【BZOJ2705】【SDOI2012】Longge的问题
查看>>
HDU2433 最短路 + 剪枝优化
查看>>
Linux系统调优
查看>>
服务器性能优化
查看>>
Python 中的赋值、拷贝、引用
查看>>
织梦后台不显示验证码的解决
查看>>
pta l2-7(家庭房产)
查看>>
c++模板实现 linq
查看>>
spring security基本知识(三) 过滤详细说明
查看>>