主要内容

选择培训配置LSTM使用贝叶斯优化

这个例子展示了如何创建一个深度学习实验找到最优网络hyperparameters长短期记忆和训练选项(LSTM)使用贝叶斯网络的优化。在本例中,您使用实验管理器训练LSTM网络预测剩余寿命(原则)的引擎。实验采用涡扇发动机退化模拟数据集。更多信息处理该数据集sequence-to-sequence回归,明白了使用深度学习Sequence-to-Sequence回归

贝叶斯优化提供了一种替代方法策略全面hyperparameters实验。每个hyperparameter你指定一个范围的值并选择优化的指标,和实验管理器搜索hyperparameters优化你的选择指标的结合。贝叶斯优化需要统计和机器学习的工具箱™。有关更多信息,请参见通过使用贝叶斯优化调整实验Hyperparameters

荷重软化捕获多少操作周期之前发动机可以失败。关注序列数据引擎是接近失败时,预处理数据通过剪切反应在指定的阈值。这种预处理操作允许网络关注行为接近失败的预测数据处理实例与高荷重软化值相等。例如,这个图中显示的第一反应的观察和对应的剪响应阈值为150。

当你训练一个深入学习网络,如何预处理数据,层和隐藏单位的数量,和初始网络的学习速率会影响网络的培训行为和性能。选择一个LSTM网络的深度涉及平衡速度和准确度。例如,更深层次的网络可以更准确,但需要更长的时间来培训和收敛[2]。

默认情况下,当您运行一个内置的回归训练实验,实验管理器计算损失和均方误差(RMSE)为每个审判你的实验。这个例子比较了网络的性能在每个试验中通过使用自定义度量特定数据集的问题。在使用自定义度量函数的更多信息,参见通过使用度量函数评估深度学习实验

开放实验

首先,打开示例。实验管理器加载一个项目与一个预先配置的实验。开放实验,实验的浏览器的名称,双击实验(SequenceRegressionExperiment)。

内置训练实验由一个描述,hyperparameters表,设置函数,和一组度量函数对实验的结果进行评估。实验,使用贝叶斯优化包括额外的选项来限制实验的持续时间。有关更多信息,请参见配置内置的训练实验

描述字段包含的文本描述的实验。对于这个例子,描述是:

Sequence-to-sequence回归来预测剩余寿命(原则)的引擎。这个实验比较了使用贝叶斯网络性能优化阈值水平,改变数据时LSTM层深度、隐藏单位的数量,和最初的学习速率。

Hyperparameter表指定策略(贝叶斯优化)和hyperparameter值用于实验。对于每个hyperparameter,指定这些选项:

  • 范围——输入一个双元素向量给出了下界和上界的一个真正的或整数值hyperparameter,或一个字符串数组或单元阵列直言hyperparameter可能值的列表。

  • 类型——选择真正的(实值hyperparameter),整数(整数值hyperparameter),或分类(分类hyperparameter)。

  • 变换——选择没有一个(没有变换)日志(对数变换)。为日志,hyperparameter必须真正的整数和积极的。采用这一选项,hyperparameter搜索和建模在对数刻度。

当您运行实验,实验管理器搜索hyperparameters的最佳组合。每个试验使用的新组合hyperparameter值基于前面试验的结果。这个示例使用这些hyperparameters:

  • 阈值集所有响应数据高于阈值等于阈值。为了防止统一的响应数据,使用阈值大于或等于150。限制容许值的设定到150年,200年和250年,实验模型阈值作为一个直言hyperparameter。

  • LSTMDepth表明LSTM层网络中使用的数量。这hyperparameter指定为1和3之间的一个整数。

  • NumHiddenUnits决定隐藏单位的数量,或存储的信息量在每个时间步,在网络中使用。增加隐藏单位的数量会导致过度拟合的数据和较长的训练时间。减少隐藏单位的数量会导致underfitting数据。指定这个hyperparameter 50到300之间的整数。

  • InitialLearnRate指定初始学习速率用于培训。如果学习速率太低,那么培训需要很长时间。如果学习速率过高,那么训练可以达到一个理想的结果或发散的。最好的学习速率取决于你数据以及网络培训。实验模型这hyperparameter在对数刻度,因为值的范围(0.001 - 0.1)跨越几个数量级。

贝叶斯优化选项实验期间,您可以指定输入的最长时间(以秒为单位)和试验运行的最大数量。最好使用贝叶斯优化的力量,进行至少30目标函数评价。

设置函数配置培训数据、网络体系结构和培训选择实验。setup函数的输入是一个结构从hyperparameter表与字段。setup函数返回四个输出,用于训练网络形象回归问题。在这个例子中,setup函数有三个部分。

dataFolder = fullfile (tempdir,“涡扇”);
如果~存在(dataFolder“dir”mkdir (dataFolder);结束
文件名= matlab.internal.examples.downloadSuppor万博1manbetxtFile (“nnet”,“数据/ TurbofanEngineDegradationSimulationData.zip”);解压缩(文件名,dataFolder);
filenameTrainPredictors = fullfile (dataFolder,“train_FD001.txt”);[XTrain, YTrain] = processTurboFanDataTrain (filenameTrainPredictors);
XTrain = helperFilter (XTrain);XTrain = helperNormalize (XTrain);
用力推= str2double (params.Threshold);i = 1:元素个数(YTrain) YTrain{我}(YTrain{我}>刺)=刺;结束
i = 1:元素个数(XTrain) = XTrain序列{};sequenceLengths (i) =(序列,2)大小;结束
[~,idx] =排序(sequenceLengths,“下”);XTrain = XTrain (idx);YTrain = YTrain (idx);
idx = randperm(元素个数(XTrain), 10);XValidation = XTrain (idx);XTrain (idx) = [];YValidation = YTrain (idx);YTrain (idx) = [];
  • 定义网络体系结构定义一个LSTM sequence-to-sequence回归网络的体系结构。网络包含LSTM层,然后是一个完全连接层大小100和辍学层辍学概率为0.5。的hyperparametersLSTMDepthNumHiddenUnits指定的数量LSTM层和隐藏的数量单位为每个层。

numResponses =大小(YTrain {1}, 1);featureDimension =大小(XTrain {1}, 1);LSTMDepth = params.LSTMDepth;numHiddenUnits = params.NumHiddenUnits;
层= sequenceInputLayer (featureDimension);
i = 1: LSTMDepth层=[层;lstmLayer (numHiddenUnits OutputMode =“序列”));结束
层=[层fullyConnectedLayer (100) reluLayer () dropoutLayer (0.5) fullyConnectedLayer (numResponses) regressionLayer];
  • 指定培训选项定义了培训选择实验。因为更深层次的网络收敛的时间较长,时代的数量设置为300,以确保所有网络的深度融合。这个例子验证网络每30迭代。最初的学习速率等于InitialLearnRate从hyperparameter表值,每15时期下降0.2倍。培训选项ExecutionEnvironment设置为“汽车”,实验运行在GPU上如果有一个可用。否则,实验管理器使用CPU。因为这个例子比较网络深度和火车对于许多时代,利用GPU加速训练时间。使用GPU需要并行计算工具箱™和支持GPU设备。万博1manbetx有关更多信息,请参见GPU计算的需求(并行计算工具箱)

maxEpochs = 300;miniBatchSize = 20;
选择= trainingOptions (“亚当”,ExecutionEnvironment =“汽车”,MaxEpochs = MaxEpochs,MiniBatchSize = MiniBatchSize,ValidationData = {XValidation, YValidation},ValidationFrequency = 30,InitialLearnRate = params.InitialLearnRate,LearnRateDropFactor = 0.2,LearnRateDropPeriod = 15,GradientThreshold = 1,洗牌=“从不”,Verbose = false);

检查设置功能,设置函数,点击编辑。setup函数MATLAB编辑器中打开。此外,设置的代码出现在函数附录1最后这个例子。

指标部分指定可选功能,评估实验的结果。实验经理评估这些函数在每次完成培训网络。检查一个度量函数,选择度量函数的名称并单击编辑。MATLAB编辑器中打开的度量函数。

预测的荷重软化引擎需要仔细考虑。如果预测低估了荷重软化,引擎维护可能会安排之前是必要的。如果预测高估了荷重软化,引擎在操作可能会失败,导致高成本或安全隐患。帮助减轻这些场景,这个例子中包括一个度量函数MeanMaxAbsoluteError识别网络,低估或overpredict荷重软化。

MeanMaxAbsoluteError指标计算的最大绝对误差,平均在整个训练集,这个指标调用预测函数来进行一系列的荷重软化的预测从训练集,然后在计算每个训练响应之间的最大绝对误差和预测响应序列,函数计算平均值的最大绝对误差。这个指标确定的实际和预测反应之间的最大偏差。的代码出现在度量函数附录3最后这个例子。

运行实验

当您运行实验,实验管理器搜索hyperparameters的最佳组合的选择指标。每个实验在实验中使用的新组合hyperparameter值基于前面试验的结果。

培训要花些时间。实验的时间限制,您可以修改贝叶斯优化选项通过减少最大运行时间或试验的最大数量。然而,请注意,运行不到30试验可以防止贝叶斯优化算法收敛于最优组hyperparameters。

默认情况下,实验管理器运行一个审判。如果你有并行计算工具箱™,你可以同时运行多个试验或卸载实验作为批处理作业在一个集群中。

  • 运行一个审判的一次实验,在实验管理器将来发布,在模式中,选择顺序并点击运行

  • 同时,运行多个试验模式中,选择同时并点击运行。如果没有当前并行池、实验管理器启动一个集群使用默认配置文件。实验管理器然后运行尽可能多的同时试验有工人在你平行池。为达到最佳效果,在你运行你的实验,开始与尽可能多的工人gpu并行池。有关更多信息,请参见并行使用实验管理器来训练网络GPU计算的需求(并行计算工具箱)

  • 将实验作为批处理作业,模式中,选择批处理顺序批处理同时,指定你集群池大小,然后单击运行。有关更多信息,请参见卸载实验作为集群的批处理作业

一个表的结果显示每个试验指标函数值。实验经理强调了试验所选指标的最优值。例如,在这个实验中,23日审判产生最小的最大绝对误差。

显示培训策划和跟踪每个试验的进展在实验时,审查结果,点击培训策划。试验的时间完成培训与网络深度增加。

评估结果

在表的结果,MeanMaxAbsoluteError价值量化多少网络低估或overpredicts荷重软化。的验证RMSE价值量化的网络推广到看不见的数据。找到最佳的实验结果,对表进行排序的结果和选择最低的试验MeanMaxAbsoluteError验证RMSE值。

  1. 指出MeanMaxAbsoluteError列。

  2. 点击三角形图标。

  3. 选择按升序排序

同样,找到最小的试验验证RMSE通过打开的下拉菜单验证RMSE列和选择按升序排序

如果没有一个试验最小化这两个值,选择试验指标的排名很好。例如,在这些结果,试验23有最小的最大绝对误差和最小第七验证RMSE。在试验验证RMSE较低,只有审判29有可比性的意思是最大绝对误差。这些试验的比取决于你是否喜欢低意味着最大绝对误差或低RMSE验证。

记录对你的实验的结果,添加一个注释。

  1. 在结果表中,右键单击MeanMaxAbsoluteError细胞最好的审判。

  2. 选择添加注释

  3. 注释窗格中,在文本框中输入你的观察。

  4. 重复前面的步骤验证RMSE细胞。

测试实验最好的试验,导出培训网络和显示预测的响应序列数随机选择测试序列。

  1. 选择最好的审判你的实验。

  2. 实验管理器将来发布,点击出口>训练网络

  3. 在对话框窗口中,输入工作空间变量的名称为导出的网络。默认的名称是trainedNetwork

  4. 使用网络和出口阈值价值网络的helper函数作为输入plotSequences中列出附录4最后这个例子。例如,在MATLAB命令窗口中,输入:

plotSequences (trainedNetwork, 200)

功能块的真实和预测响应序列看不见的测试数据。

关闭实验

实验的浏览器,右键单击项目并选择的名称关闭项目。实验管理器关闭所有的实验和结果包含在项目中。

附录1:设置功能

这个函数配置培训数据、网络体系结构和培训选择实验。

输入

  • 参数个数从实验管理器是一个结构字段hyperparameter表。

输出

  • XTrain是一个细胞包含训练数据的数组。

  • YTrain是一个单元阵列包含的回归值训练,

  • 是一个层图,定义了神经网络架构。

  • 选项是一个trainingOptions对象。

函数[XTrain、YTrain层,选项]= SequenceRegressionExperiment_setup (params) dataFolder = fullfile (tempdir,“涡扇”);如果~存在(dataFolder“dir”mkdir (dataFolder);结束文件名= matlab.internal.examples.downloadSuppor万博1manbetxtFile (“nnet”,“数据/ TurbofanEngineDegradationSimulationData.zip”);解压缩(文件名,dataFolder);filenameTrainPredictors = fullfile (dataFolder,“train_FD001.txt”);[XTrain, YTrain] = processTurboFanDataTrain (filenameTrainPredictors);XTrain = helperFilter (XTrain);XTrain = helperNormalize (XTrain);用力推= str2double (params.Threshold);i = 1:元素个数(YTrain) YTrain{我}(YTrain{我}>刺)=刺;结束i = 1:元素个数(XTrain) = XTrain序列{};sequenceLengths (i) =(序列,2)大小;结束[~,idx] =排序(sequenceLengths,“下”);XTrain = XTrain (idx);YTrain = YTrain (idx);idx = randperm(元素个数(XTrain), 10);XValidation = XTrain (idx);XTrain (idx) = [];YValidation = YTrain (idx);YTrain (idx) = [];numResponses =大小(YTrain {1}, 1);featureDimension =大小(XTrain {1}, 1); LSTMDepth = params.LSTMDepth; numHiddenUnits = params.NumHiddenUnits; layers = sequenceInputLayer(featureDimension);i = 1: LSTMDepth层=[层;lstmLayer (numHiddenUnits OutputMode =“序列”));结束层=[层fullyConnectedLayer (100) reluLayer () dropoutLayer (0.5) fullyConnectedLayer (numResponses) regressionLayer];maxEpochs = 300;miniBatchSize = 20;选择= trainingOptions (“亚当”,ExecutionEnvironment =“汽车”,MaxEpochs = MaxEpochs,MiniBatchSize = MiniBatchSize,ValidationData = {XValidation, YValidation},ValidationFrequency = 30,InitialLearnRate = params.InitialLearnRate,LearnRateDropFactor = 0.2,LearnRateDropPeriod = 15,GradientThreshold = 1,洗牌=“从不”,Verbose = false);结束

附录2:过滤和正常化预见性维护数据

辅助函数helperFilter过滤器与常量值通过删除功能的数据。特性保持不变的步骤可以产生负面影响训练。

函数[XTrain, XTest] = helperFilter (XTrain XTest) m = min ([XTrain {:}], [], 2);M = max ([XTrain {:}], [], 2);idxConstant = M = = M;
i = 1:元素个数(XTrain) XTrain{我}(idxConstant:) = [];如果输入参数个数> 1 XTest{我}(idxConstant:) = [];结束结束结束

辅助函数helperNormalize规范化培训和测试预测零均值和单位方差。

函数[XTrain, XTest] = helperNormalize (XTrain XTest)μ=意味着([XTrain {:}), 2);sig =性病([XTrain {}):, 0, 2);
i = 1:元素个数(XTrain) XTrain{我}= (XTrain{我}-μ)。/团体;如果输入参数个数> 1 XTest{我}= (XTest{我}-μ)。/团体;结束结束结束

附录3:计算均值最大绝对错误

这个度量函数计算的最大绝对误差训练网络,训练集的平均值。

函数metricOutput = MeanMaxAbsoluteError (trialInfo)净= trialInfo.trainedNetwork;用力推= str2double (trialInfo.parameters.Threshold);filenamePredictors = fullfile (tempdir,“涡扇”,“train_FD001.txt”);[XTrain, YTrain] = processTurboFanDataTrain (filenamePredictors);XTrain = helperFilter (XTrain);XTrain = helperNormalize (XTrain);i = 1:元素个数(YTrain) YTrain{我}(YTrain{我}>刺)=刺;结束YPred =预测(净、XTrain MiniBatchSize = 1);maxAbsErrors = 0(1,元素个数(YTrain));i = 1:元素个数(YTrain) absError = abs (YTrain{我}-YPred{我});maxAbsErrors (i) = max (absError);结束metricOutput =意味着(maxAbsErrors);结束

附录4:情节预见性维护序列

这个函数情节真实,并预测响应序列允许你评估你的训练网络的性能。这个函数使用了辅助函数helperFilterhelperNormalize中列出附录2

函数plotSequences(净,阈值)filenameTrainPredictors = fullfile (tempdir,“涡扇”,“train_FD001.txt”);filenameTestPredictors = fullfile (tempdir,“涡扇”,“test_FD001.txt”);filenameTestResponses = fullfile (tempdir,“涡扇”,“RUL_FD001.txt”);[XTrain, YTrain] = processTurboFanDataTrain (filenameTrainPredictors);[XTest,欧美]= processTurboFanDataTest (filenameTestPredictors filenameTestResponses);[XTrain, XTest] = helperFilter (XTrain XTest);[~,XTest] = helperNormalize (XTrain XTest);i = 1:元素个数(YTrain) YTrain{我}(YTrain{我}>阈值)=阈值;我次{}(欧美{我}>阈值)=阈值;结束YPred =预测(净、XTest MiniBatchSize = 1);idx = randperm (100 4);图i = 1:元素个数(idx)次要情节(2,2,我)情节(欧美{idx (i)},”——“)举行情节(YPred {idx (i)},“。”)举行ylim([0阈值+ 25)标题(“测试观察”+ idx (i))包含(“时间步”)ylabel (“原则”)结束传奇([“测试数据”“预测”),位置=“西南”)结束

引用

[1]Saxena,阿凯Goebel唐西门,和尼尔·埃克伦。“损害传播为航空发动机建模Run-to-Failure模拟。”2008年国际会议上预测和健康管理(2008):1 - 9。

[2]Jozefowicz、Rafal Wojciech伦巴,Ilya Sutskever。“复发性网络架构的实证探索。”美国第32国际会议上机器学习(2015):2342 - 2350。

另请参阅

应用程序

功能

相关的话题