深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类
一、概述
关于LSTM同系列的前一篇文章写的是利用LSTM网络对电力负荷进行预测【LSTM预测】,其本质是sequence-to-sequence problems,序列到序列的预测应用。这里做一下sequence-to-label classification problems,序列到标签的分类应用【LSTM分类】。关于LSTM的网络特性不再赘述。
本篇博文的具体示例是对给定的电力负荷进行分类,电力负荷数据格式为每日96个数据点的一维时间序列值,每条负荷数据均对应一个类型标签,总共类别为6类。其他的例子可以参考官网给定的japaneseVowelsTrainData 案例。
负荷数据是某电力公司内部数据,鉴于保密要求,这里仅描述数据格式,负荷数据集不提供。
- 类别:6
- 数据长度:96
- 训练数据条数:9821
- 测试数据条数:2456
二、数据格式转换
首先看一下需要传到LSTM网络的训练参数格式。
trainedNet = trainNetwork(C, Y, layers, options);
它必须从序列输入层开始,C是一个包含序列或时间序列预测器的元胞数组。C是d行1列,d代表有多少个训练样本,每个训练样本又包括N行M列,N代表训练样本的数据维度,M代表序列长度,y是标签的分类向量,是categorical类型。
因此,训练数据应该转换成元胞数组,训练数据标签应该转换成categorical类型。
2.1 训练数据格式转换
代码如下所示,用XTrain和YTrain来代替上述训练网络中的C和Y。
dataStandardlized是原始数据标准化后的数据,dataStandardlizedLable是每条数据对应的类别标签,num型。获得XTrain需要通过XTrainData转换成元胞数组,XTrain每一行是一条负荷训练样本数据,即1*96的数据。
YTrain是categorical类别数组,可以通过categorial函数转换,但是输入参数时字符元胞数组,因此现将XTrainLabel转换成字符矩阵,然后再将矩阵转换成元胞数组,最后转换成categorical类型。
%提取训练样本数据
XTrainSize = 9821;
XTrainData = dataStandardlized(1:XTrainSize,:);
XTrainLabel = dataStandardlizedLable(1:XTrainSize,:);%XTrain
for i = 1:size(XTrainData,1)XTrain{i,1} = XTrainData(i,:);
end%YTrain
TrainstrLable = num2str(XTrainLabel);% num to str
for i = 1:size(XTrainData,1)% str matrix to cellTraincellLable{i,1} = TrainstrLable(i,1);
end
YTrain = categorical(TraincellLable);%cell to categorical
2.2 测试数据格式转换
测试数据格式转换方法与训练数据格式转换相同,见代码。
%提取测试样本
XTestData = dataStandardlized(1+XTrainSize:end,:);
XTestLabel = dataStandardlizedLable(1+XTrainSize:end,:);
%XTest
for i = 1:size(XTestData,1)XTest{i,1} = XTestData(i,:);
end
%YTest
TeststrLable = num2str(TestLabel);% num to str
for i = 1:size(XTestData,1)TestcellLable{i,1} = TeststrLable(i,1);% str matrix to cell
end
YTest = categorical(TestcellLable);%cell to categorical
三、网络参数设置
前面讲到了TrainNetwork的C和Y,这里描述一下网络参数 layers和options的具体配置。
3.1 layers
layers用于定义训练网络的架构,按照网络架构的先后,依次填写到layers的每一行。
首先定义LSTM网络架构:
- 将输入大小指定为序列大小 1(输入数据的维度,指同一时间下的数据维度)
- 指定具有 100 个隐含单元的双向 LSTM 层,并输出序列的最后一个元素。
- 指定六个类,包含大小为 1 的全连接层,后跟 softmax 层和分类层。
inputSize = 1;
numHiddenUnits = 100;
numClasses = 6;layers = [ ...sequenceInputLayer(inputSize)bilstmLayer(numHiddenUnits,'OutputMode','last')fullyConnectedLayer(numClasses)softmaxLayerclassificationLayer]
具体地:
- sequenceInputLayer(inputSize):序列输入层,指定输入维度
- bilstmLayer(numHiddenUnits,'OutputMode','last'):双向LSTM层,指定隐藏节点,输出模式为‘last’即输出最后一个分类值
- fullyConnectedLayer(numClasses):全连接层,指定输出类别的个数
- softmaxLayer:这层是输出各类别分类的的概率
- classificationLayer:分类层,输出最后的分类结果,类似于概率竞争投票。
3.2 options
options用于指定训练网络的优化选项,通过调用trainingOptions进行设置。
此处指定训练选项:
- 求解器为 'adam'
- 梯度阈值为 1,最大轮数为 100。
- 100作为小批量数。
- 填充数据以使长度与最长序列相同,序列长度指定为 'longest'。
- 数据保持按序列长度排序的状态,不打乱数据。
- 'ExecutionEnvironment' 指定为 'cpu',设定为'auto'表明使用GPU。
maxEpochs = 100;
miniBatchSize = 100;options = trainingOptions('adam', ...'ExecutionEnvironment','cpu', ...'GradientThreshold',1, ...'MaxEpochs',maxEpochs, ...'MiniBatchSize',miniBatchSize, ...'SequenceLength','longest', ...'Shuffle','never', ...'Verbose',0, ...'Plots','training-progress');
四、训练LSTM网络
将前面准备好的参数送入训练网络,等待训练结束。
net = trainNetwork(XTrain,YTrain,layers,options);
我这里的训练时间非常长,当然训练过程与隐藏节点数,训练数据的维度和训练次数以及电脑配置有关系,我这里单CPU训练耗时112分钟。
五、利用LSTM网络进行分类
利用标准结果和分类结果计算分类的正确率。
使用classify函数进行分类,同训练过程一样,仍然要指定小批量大小为100,指定组内数据按照最长的数据填充。
miniBatchSize = 100;
YPred = classify(net,XTest, ...'SequenceLength','longest','MiniBatchSize',miniBatchSize);
%计算分类准确度
acc = sum(YPred == YTest)./numel(YTest)
可以看到分类精度达到92%,还是很不错了。
------分享知识,让人愉悦,原创博文,支持请点赞。
深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类相关推荐
- 神经网络学习笔记3——LSTM长短期记忆网络
目录 1.循环神经网络 1.1循环神经网络大致结构 1.2延时神经网络(Time Delay Neural Network,TDNN) 1.3按时间展开 1.4反向传播 1.5 梯度消失,梯度爆炸 2 ...
- 深度学习 LSTM长短期记忆网络原理与Pytorch手写数字识别
深度学习 LSTM长短期记忆网络原理与Pytorch手写数字识别 一.前言 二.网络结构 三.可解释性 四.记忆主线 五.遗忘门 六.输入门 七.输出门 八.手写数字识别实战 8.1 引入依赖库 8. ...
- RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
全文链接:http://tecdat.cn/?p=25133 2017 年年中,R 推出了 Keras 包 _,_这是一个在 Tensorflow 之上运行的综合库,具有 CPU 和 GPU 功能(点 ...
- 利用LSTM(长短期记忆网络)来处理脑电数据
目录 LSTM 原理介绍 LSTM的核心思想 一步一步理解LSTM 代码案例 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 Rose小哥今天介绍一下用LS ...
- Pytorch LSTM 长短期记忆网络
Pytorch LSTM 长短期记忆网络 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候可 ...
- 【思维导图】利用LSTM(长短期记忆网络)来处理脑电数据
文章来源| 脑机接口社区群友 认知计算_茂森的授权分享 在此非常感谢 认知计算_茂森! 本篇文章主要通过思维导图来介绍利用LSTM(长短期记忆网络)来处理脑电数据. 文章的内容来源于社区分享的文章&l ...
- Maltab GUI课程设计——LSTM长短期记忆网络回归预测
文章目录 课程设计 平台:Matlab App designer 功能实现:LSTM长短期记忆网络回归预测 目的: 演示: 欢迎交流 课程设计 平台:Matlab App designer 功能实现: ...
- 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测
目录 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测 预测效果 程序设计 案例1 案例2 参考资料 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测 预测效果 ...
- LSTM(长短期记忆网络)原理介绍
相关学习资料: Pytorch:RNN.LSTM.GRU.Bi-GRU.Bi-LSTM.梯度消失.爆炸 难以置信!LSTM和GRU的解析从未如此清晰 RNN_了不起的赵队-CSDN博客_rnn 如何从 ...
最新文章
- 达人眼中的WINCE网络驱动
- poj 2449 A*求k短路
- 在Python中操作文件之truncate()方法的使用教程
- 山寨版项目管理经验小结
- C#LeetCode刷题之#121-买卖股票的最佳时机(Best Time to Buy and Sell Stock)
- 计算机美化照片教案,美化你的桌面 教案
- 运行adb devices命令后 显示 List of devices attached 无法获取设备解决方法
- java案例2-6:登录注册
- 国内哪家云服务器租用最好?
- python化学公式配平_用Python配平化学方程式的方法
- 360 技术岗秋招笔试原题(2022届)
- 公寓上网新认证方式破解研究
- Oracle OR条件的优化与改写
- 车载毫米波雷达测试(1)_关于雷达的目标检测性能测试与雷达模拟器
- linux的sssd服务,linux – SSSD进程不会死
- 005_redis_set集合
- The Power of H3D2 ! 截图,视频!
- KV存储-Aerospike之AP与CP模式
- tkinter: 联通青啤活动流量领取 .2021-01-19
- Adobe Premiere基础-工具使用(选择工具,剃刀工具,等常用工具)(三)