【预测模型】基于matlab RNN循环神经网络预测【含Matlab源码 363期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【预测模型】基于matlab RNN循环神经网络预测【含Matlab源码 363期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、RNN循环神经网络简介
神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下:
将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特定的y,那么既然有了这么强大的模型,为什么还需要RNN(循环神经网络)呢?
1 为什么需要RNN(循环神经网络)
他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。
比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列; 当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。
以nlp的一个最简单词性标注任务来说,将我 吃 苹果 三个单词标注词性为 我/nn 吃/v 苹果/nn。
那么这个任务的输入就是:
我 吃 苹果 (已经分词好的句子)
这个任务的输出是:
我/nn 吃/v 苹果/nn(词性标注好的句子)
对于这个任务来说,我们当然可以直接用普通的神经网络来做,给网络的训练数据格式了就是我-> 我/nn 这样的多个单独的单词->词性标注好的单词。
但是很明显,一个句子中,前一个单词其实对于当前单词的词性预测是有很大影响的,比如预测苹果的时候,由于前面的吃是一个动词,那么很显然苹果作为名词的概率就会远大于动词的概率,因为动词后面接名词很常见,而动词后面接动词很少见。
所以为了解决一些这样类似的问题,能够更好的处理序列的信息,RNN就诞生了。
2 RNN结构
首先看一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:
不知道初学的同学能够理解这个图吗,反正我刚开始学习的时候是懵逼的,每个结点到底代表的是一个值的输入,还是说一层的向量结点集合,如何隐藏层又可以连接到自己,等等这些疑惑~这个图是一个比较抽象的图。
我们现在这样来理解,如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);
U是输入层到隐藏层的权重矩阵,o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。
那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。
我们给出这个抽象图对应的具体图:
我们从上图就能够很清楚的看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。
如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:
3 总结
好了,到这里大概讲解了RNN最基本的几个知识点,能够帮助大家直观的感受RNN和了解为什么需要RNN,后续总结它的反向求导知识点。
最后给出RNN的总括图:
三、部分源代码
clc;
clear all;
[train_data,test_data]=LSTM_data_process();
data_length=size(train_data,1);
data_num=size(train_data,2);
%% 网络参数初始化
% 结点数设置
input_num=data_length;
cell_num=5;
output_num=size(test_data,1);
% 网络中门的偏置
bias_input_gate=rand(1,cell_num);
bias_forget_gate=rand(1,cell_num);
bias_output_gate=rand(1,cell_num);
%网络权重初始化
ab=20;
weight_input_x=rand(input_num,cell_num)/ab;
weight_input_h=rand(output_num,cell_num)/ab;
weight_inputgate_x=rand(input_num,cell_num)/ab;
weight_inputgate_c=rand(cell_num,cell_num)/ab;
weight_forgetgate_x=rand(input_num,cell_num)/ab;
weight_forgetgate_c=rand(cell_num,cell_num)/ab;
weight_outputgate_x=rand(input_num,cell_num)/ab;
weight_outputgate_c=rand(cell_num,cell_num)/ab;
%hidden_output权重
weight_preh_h=rand(cell_num,output_num);
%网络状态初始化
cost_gate=0.25;
h_state=rand(output_num,data_num);
cell_state=rand(cell_num,data_num);
%% 网络训练学习
for iter=1:100 yita=0.01; %每次迭代权重调整比例 for m=1:data_num %前馈部分 if(m==1) gate=tanh(train_data(:,m)'*weight_input_x); input_gate_input=train_data(:,m)'*weight_inputgate_x+bias_input_gate; output_gate_input=train_data(:,m)'*weight_outputgate_x+bias_output_gate; for n=1:cell_num input_gate(1,n)=1/(1+exp(-input_gate_input(1,n))); output_gate(1,n)=1/(1+exp(-output_gate_input(1,n))); end forget_gate=zeros(1,cell_num); forget_gate_input=zeros(1,cell_num); cell_state(:,m)=(input_gate.*gate)'; else gate=tanh(train_data(:,m)'*weight_input_x+h_state(:,m-1)'*weight_input_h); input_gate_input=train_data(:,m)'*weight_inputgate_x+cell_state(:,m-1)'*weight_inputgate_c+bias_input_gate; forget_gate_input=train_data(:,m)'*weight_forgetgate_x+cell_state(:,m-1)'*weight_forgetgate_c+bias_forget_gate; output_gate_input=train_data(:,m)'*weight_outputgate_x+cell_state(:,m-1)'*weight_outputgate_c+bias_output_gate; for n=1:cell_num input_gate(1,n)=1/(1+exp(-input_gate_input(1,n))); forget_gate(1,n)=1/(1+exp(-forget_gate_input(1,n))); output_gate(1,n)=1/(1+exp(-output_gate_input(1,n))); end cell_state(:,m)=(input_gate.*gate+cell_state(:,m-1)'.*forget_gate)'; end pre_h_state=tanh(cell_state(:,m)').*output_gate; h_state(:,m)=(pre_h_state*weight_preh_h)'; end % 误差的计算 Error=h_state(:,m)-train_data(:,m);
% Error=h_state(:,:)-train_data(end,:); Error_Cost(1,iter)=sum(Error.^2); if Error_Cost(1,iter) < cost_gate iter break; end [ weight_input_x,... weight_input_h,... weight_inputgate_x,... weight_inputgate_c,... weight_forgetgate_x,... weight_forgetgate_c,... weight_outputgate_x,... weight_outputgate_c,... weight_preh_h ]=LSTM_updata_weight(m,yita,Error,... weight_input_x,... weight_input_h,... weight_inputgate_x,... weight_inputgate_c,... weight_forgetgate_x,... weight_forgetgate_c,... weight_outputgate_x,... weight_outputgate_c,... weight_preh_h,... cell_state,h_state,... input_gate,forget_gate,... output_gate,gate,... train_data,pre_h_state,... input_gate_input,... output_gate_input,... forget_gate_input); end
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.
【预测模型】基于matlab RNN循环神经网络预测【含Matlab源码 363期】相关推荐
- 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 【Matlab树叶分类】BP神经网络植物叶片分类【含GUI源码 916期】
一.代码运行视频(哔哩哔哩) [Matlab树叶分类]BP神经网络植物叶片分类[含GUI源码 916期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...
- 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】
一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】
一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...
- 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...
- 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...
- 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】
一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...
- 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】
一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...
- 【Matlab语音分析】语音信号分析【含GUI源码 1718期】
一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...
- 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】
一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...
最新文章
- Spring Boot 2.2.0 正式发布,大幅性能提升 + Java 13 支持
- 【Java设计模式】装饰模式
- C++ 析构函数设为虚函数的好处
- 20应用统计考研复试要点(part41)--概率论与数理统计
- 湖南工程学院计算机网络考试,湖南工程学院 计算机网络期末试卷试题
- 2017-2018-1 20155338 加分项目——PWD的实现
- C# 使用Quartz简单实例以及备忘
- AndroidStudio安卓原生开发_Activity的概念和简单使用_创建Activity_创建Layout资源文件_给Activity引入资源Id---Android原生开发工作笔记80
- TypeScript手册翻译系列4-模块
- MFC中打开一个获取路径的对话框
- Java大数类自我需要掌握的
- cad汉仪长仿宋体_工程制图国标字体“长仿宋体”下载
- 2022考研计算机-软件工程教程
- C#编程打字指法练习
- KGB知识图谱完成金融行业的信息抽取工作
- 多线程并发编程知识点汇总
- 即插即涨2-3%!AC-FPN:用于目标检测的注意力引导上下文的特征金字塔网络
- go每日新闻(2021-12-01)——Go 1.18新特性前瞻:原生支持Fuzzing测试
- 华为OD机试 - 模拟商场优惠打折
- EMC传导干扰滤波电路的设计
热门文章
- DFMZ-开发过程中遇到的错误-01
- python:执行一个命令行N次
- Spring.Net学习笔记(3)-创建对象
- 如何配置可以远程访问linux上mysql
- WCF中的服务契约(Continued)
- ASP.NET MVC应用中一个诡异错误的处理
- 传智播客 C/C++学习笔记 野指针
- Atitit uri url urn 的概念区别 与联系 目录 1.1. 概念图 uri包括url和urn。。Urn一般是相对路径。。。	1 1.2. 统一资源名称 (Uniform Resourc
- Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode 1.1. 不个网页title保存成个个文件的时候儿有无效字符的问题...	1
- Atiitt uke发展战略规划十三五规划纲要 attilax总结