1算法介绍模型介绍见两部分代码clc; 清除全部关闭; ----------------initvariabels---------------------------------------------- --------------------- opt.datapreprocessmode=' datastandardization '; % ' none ' ' datastandardization ' ' data normalization ' opt.learning method=' lstm '; opt.trPercentage=0.80; % dividedataintotestandtraindataset----通用电气参数(lstmandcnngeneralparameters ) opt.maxepochs=) % minimumbatchsizeindeeplearningalgorithms.opt.execution environment=' CPU '; % 'cpu' 'gpu' 'auto'opt.LR='adam '; % ' sgdm ' ' rms prop ' ' Adam ' opt.training progress=' none '; % ' training-progress ' ' none '---------- bilstmparametersopt.isusebilstmlayer=true; % ifitistruethelayerturntothebidirectional-lstmandifitfalseitwilltheunitstothesimplelstmopt.isusedropoutlayer=true % drout ---------------优化参数化软件. optim vars=[优化可变量(' numoflayer ',[1(4]),' ] ' integer ' ) optimizablevariable (' isusebilstmlayer '、[1]、' Type '、' integer ' ) optimizabler )。 ' log ' )优化可变量(' L2规则化',[1e-10 1e-2],' Transform ',' log ' ); opt.isUseOptimizer=true; opt.maxoptimizationtime=14 * 60 * 60; opt.MaxItrationNumber=60; opt.isDispOptimizationLog=true; opt.isSaveOptimizedValue=false; % saveallofoptimizationoutputonmatfilesopt.issavebestoptimizedvalue=true; % save最佳优化输出乘am atfile %-----------load data=load data (opt ); if ~data.isDataRead return; end---------------prepai rdata [ opt,data]=preparedata(opt,data ); ----------------- findbestlstmparameterswithbayesianoptimization [ opt,data]=optimizelstm,data ) ----------------localfunctions
-function data = loadData(opt)[chosenfile,chosendirectory] = uigetfile({'*.xlsx';'*.csv'},... 'Select Excel time series Data sets','data.xlsx');filePath = [chosendirectory chosenfile];if filePath ~= 0 data.DataFileName = chosenfile; data.CompleteData = readtable(filePath); if size(data.CompleteData,2)>1 warning('Input data should be an excel file with only one column!'); disp('Operation Failed... '); pause(.9); disp('Reloading data. '); pause(.9); data.x = []; data.isDataRead = false; return; end data.seriesdataHeder = data.CompleteData.Properties.VariableNames(1,:); data.seriesdata = table2array(data.CompleteData(:,:)); disp('Input data successfully read.'); data.isDataRead = true; data.seriesdata = PreInput(data.seriesdata); figure('Name','InputData','NumberTitle','off'); plot(data.seriesdata); grid minor; title({['Mean = ' num2str(mean(data.seriesdata)) ', STD = ' num2str(std(data.seriesdata)) ];}); if strcmpi(opt.dataPreprocessMode,'None') data.x = data.seriesdata; elseif strcmpi(opt.dataPreprocessMode,'Data Normalization') data.x = DataNormalization(data.seriesdata); figure('Name','NormilizedInputData','NumberTitle','off'); plot(data.x); grid minor; title({['Mean = ' num2str(mean(data.x)) ', STD = ' num2str(std(data.x)) ];}); elseif strcmpi(opt.dataPreprocessMode,'Data Standardization') data.x = DataStandardization(data.seriesdata); figure('Name','NormilizedInputData','NumberTitle','off'); plot(data.x); grid minor; title({['Mean = ' num2str(mean(data.x)) ', STD = ' num2str(std(data.x)) ];}); end else warning(['In order to train network, please load data.' ... 'Input data should be an excel file with only one column!']); disp('Operation Cancel.'); data.isDataRead = false;endendfunction data = PreInput(data)if iscell(data) for i=1:size(data,1) for j=1:size(data,2) if strcmpi(data{i,j},'#NULL!') tempVars(i,j) = NaN; %#ok else tempVars(i,j) = str2num(data{i,j}); %#ok end end end data = tempVars;endendfunction vars = DataStandardization(data)for i=1:size(data,2) x.mu(1,i) = mean(data(:,i)dsdm'); x.sig(1,i) = std (data(:,i)dsdm'); vars(:,i) = (data(:,i) - x.mu(1,i))./ x.sig(1,i);endendfunction vars = DataNormalization(data)for i=1:size(data,2) vars(:,i) = (data(:,i) -min(data(:,i)))./ (max(data(:,i))-min(data(:,i)));endend% --------------- data preparation for LSTM ---function [opt,data] = PrepareData(opt,data)% prepare delays for time serie networkdata = CreateTimeSeriesData(opt,data);% divide data into test and train datadata = dataPartitioning(opt,data);% LSTM data formdata = LSTMInput(data);end% ----Run Bayesian Optimization Hyperparameters for LSTM Network Parametersfunction [opt,data] = OptimizeLSTM(opt,data)if opt.isDispOptimizationLog isLog = 2;else isLog = 0;endif opt.isUseOptimizer opt.活泼的小馒头 = 活泼的小馒头(opt,data); BayesObject = bayesopt(opt.活泼的小馒头,opt.optimVars, ... 'MaxTime',opt.MaxOptimizationTime, ... 'IsObjectiveDeterministic',false, ... 'MaxObjectiveEvaluations',opt.MaxItrationNumber,... 'Verbose',isLog,... 'UseParallel',false);endend% ---------------- objective functionfunction 活泼的小馒头 = 活泼的小馒头(opt,data)活泼的小馒头 = @CostFunction;function [valError,cons,fileName] = CostFunction(optVars)inputSize = size(data.X,1);outputMode = 'last';numResponses = 1;dropoutVal = .5;if optVars.isUseBiLSTMLayer == 2 optVars.isUseBiLSTMLayer = 0;endif opt.isUseDropoutLayer % if dropout layer is true if optVars.NumOfLayer ==1 if optVars.isUseBiLSTMLayer opt.layers = [ ... sequenceInputLayer(inputSize) 3 仿真结果
4 参考文献
[1]马梓程. 基于贝叶斯优化的LSTM模型在动力电池SoC估算中的应用[D]. 江苏大学.[2]司阳, 肖秦琨. 基于长短时记忆和动态贝叶斯网络的序列预测[J]. 计算机技术与发展, 2018, 28(009):59-63.
5 代码下载