摘要:此神经网络有个隐含层,每层个节点,个是一个预测类的后向反馈神经网络,建立值用以量化某声学设备设计方案的好坏和个设计尺寸的函数关系。导入依赖库用以处理矩阵数据,用以可视化,用以训练后向反馈神经网络。
我们正在研究如何用更廉价、更高效、鲁棒性更好的方法对大宽度、大深度的神经网路进行调参(hidden layer的层数,每层layer的节点,epochs,batch_size)。
无论如何,先构建一个规模较大的神经网络,要保证训练的时间(即使使用GPU计算)。
此神经网络有9个隐含层,每层400个节点,1450401个trainable parameters,是一个预测类的后向反馈神经网络,建立feval值(用以量化某声学设备设计方案的好坏)和15个设计尺寸的函数关系。
1.导入依赖库
pandas用以处理矩阵数据,matplotlib用以可视化,keras用以训练后向反馈神经网络。
import pandas as pd import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers.core import Dense,Dropout, Activation from 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_std x_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)
5.训练模型
迭代200次,每一次批量梯度下降使用256个样本。
model.fit(x_train, y_train, epochs = 200, batch_size = 256)
最终loss值稳定在0.0035左右
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()
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/40785.html
摘要:目前,这些选择又称为超参数是通过经验,随机搜索或计算密集型搜索过程来选择的。该技术是超参数优化最常用的两种方法随机搜索和手动调试的结合。随机搜索中会并行训练神经网络的群体,并在训练结束时选择较高性能的模型。 在围棋和Atari游戏、图像识别与语言翻译等领域,神经网络都取得了巨大的成功。但经常被忽视的一点是,神经网络在这些特定应用中的成功往往取决于研究开始时做出的一系列选择,包括:使用何种类型...
摘要:华为云,从到开发训练模型,通过极快和极简实现普惠现如今技术概念火爆落地应用更是繁多,但开发呢是否困难到底有多痛据了解,大部分开发者的工作时间并不长,并且十有八九可能不是科班出身。 华为云EI ModelArts,从0到1开发训练AI模型,通过极快和极简实现普惠AI现如今 AI 技术、概念火爆、落地应用更是繁多,但开发呢?是否困难?到底有多痛?据了解,大部分 AI 开发者的工作时间并不长...
阅读 1347·2021-09-13 10:25
阅读 536·2019-08-30 15:53
阅读 2211·2019-08-30 15:44
阅读 1954·2019-08-29 17:20
阅读 1569·2019-08-29 16:36
阅读 1765·2019-08-29 14:10
阅读 1763·2019-08-29 12:44
阅读 1133·2019-08-23 14:13