TensorFlow 学习之循环神经网络(RNN)

(机器学习)Tensorflow下RNN实现 循环神经网络(Recurrent Neural Network,RNN) 现实生活中,我们输入的向量往往存在着前后联系,即前一个输入和后一个输入是有关联的,比如文本,语音,视频等,因此,我们需要了解深度学习中的另一类重要的神经网络,那就是循环神经网络(Recurrent Neural Network,RNN). 循环神经网络(Recurrent Neural Network,RNN)依赖于一个重要... 阅读详情

近期, JoinQuant 金融终端上线了python3.6版本,并且为小伙伴们带来了诸多重要更新:

  • 期权数据;

  • 支持 Tick 回测功能;

  • 研究示例文件增加了 TensorFlow、PyTorch 的安装教程;

  • 支持 pip 一键安装 TensorFlow、PyTorch、Keras 等深度学习库;

  • 组合优化更新:支持风险因子暴露限制、换手率限制、流动性限制、流动性限制、行业偏离度限制、追踪误差限制、换手率限制等;

温馨提示:可以点击JoinQuant 金融终端下载最新版本的客户端软件;点击阅读原文,可获取本文研究文件。


目录

  1. 循环神经网络简介

  2. 简单的循环神经网络

  3. 用TensorFlow构建简单的循环神经网络

  4. 各种不同的循环神经网络

1. 循环神经网络简介

循环神经网络(Recurrent Neural Network, RNN)是一类用于处理序列数据的神经网络。就像卷积网络是专门用于处理网格化数据(像一个图像),循环神经网络是专门用于处理序列数据的。P.S. 为了方便理解,该篇文章尽量的删减了所需公式部分。 

讲到循环神经网络就不得不提起神经网络,而两者最大的不同就是循环神经网络可以根据过去做到未来。我们可以根据不同的训练准则,选择性的精确保留过去序列的某些方面。下图为神经网络与循环神经网络的对比。

在图中可以看到一个普通的神经网络就是将输入x通过函数f的计算再到状态h。而循环神经网络顾名思义就是一个循环过程,这个循环网络只处理来自输入X的信息,将其合并到经过时间向前传播的状态h,f是数据的处理函数。可以发现当前状态是可以影响其未来的状态。

2.简单的循环神经网络

我们将上面那个没有输出的循环神经网络扩展成一个完整的循环神经网络

在图中损失L衡量每个y^与相应的训练目标y的距离。从图中可以看出模型为向前传播。

为了更好地解释上面的循环神经网络,我们先假设一些东西。在上图中没有指定隐藏单元的激活函数,我们假设激活函数为f。RNN从特定的起始状态h(0)开始向前传播。从t=1到t=τ的每个时间步,我们应用以下更新方程:

其中的参数的偏执向量b和c联通权重矩阵 U、V、W,分别对应于输入到隐藏、隐藏到输出和隐藏到隐藏的链接的权重。通过上面的公式就可以计算出估计的y值,但是上面这些权重到底该取多少合适,我们并不知道,所以这个时候就需要通过我们上述估计出的y和真实的y做对比,之后通过设置学习率和选择优化器来重新调整 U、V、W,一直重复这个过程直到误差符合要求为止。这个过程和普通的神经网络是大致相同的。

3. 用TensorFlow构建简单的循环神经网络

TensorFlow 是计算机图模型,即用图的形式来表示运算过程的一种模型。大概来说就是我们需要在图中先画出来各个参数设定,设定好之后再运行它。对于 TensorFlow 图里面的各个元素来说,设定好它是并不运行的,直到用命令运行图中的某个参数我们才会运行。

下面是用 TensorFlow 建立一个循环神经网络模型,查看模型训练的效果。

以沪深300指数为例,我们想要预测下一天的指数收盘价。具体思路就是为了精准的预测输出值,就需要一个多次重复的一个过程,先随机的指定权重和偏置,经过一次次的循环,更新权重和偏置,最后找到最优的值来确定输出。其中每一次的计算流程如下图所示,我们希望得到L(t)L(t),之后再根据其值得大小调整权重,最后得到训练的结果:

注:在用 TensorFlow 最重要的一点就是对数据维度、形状的把控,一不小心就会出现问题。

第一步,我们需要载入用到的包。

import tensorflow as tf
import numpy as np
import pandas as pd
#函数用于清除默认图形堆栈并重置全局默认图形
tf.reset_default_graph()

第二步,对输入值和输出值进行设定。

#数据定义
#输入值x:以当天沪深300指数的开盘价、收盘价、最高价、最低价为输入数据
x_temp=get_price('000300.XSHG',start_date='2018-01-01',end_date='2018-12-31')[0:-1].iloc[:,:-2]
#将x调整为TensorFlow的格式(由于tf处理数据的格式需要改成float32)x=tf.Variable(np.array(x_temp).astype(np.float32))
#输出值y:以第二天沪深300指数的收盘价作为输出数据y_temp=get_price('000300.XSHG',start_date='2018-01-01',end_date='2018-12-31')[1:]['open']
#将y调整为TensorFlow的格式
y_temp=pd.DataFrame(y_temp)y=tf.Variable(np.array(y_temp).astype(np.float32))

第三步:定义循环神经网络的构成图与一些参数

1、隐藏层的层数:

在图中显示为1层,但实际上层数多一点学习效果更好,可以想象为一个黑箱,这里设置为128层。

2、学习率:学习率就是根据误差大小,选择学习的比率。这里设置为0.1

#设置学习率为0.1
lr=0.1
#设置隐藏层的层数为128
hidden_units=128
#输入参数的维度
x_inputs=len(x_temp.columns)
#输入数据的长度
n_step=len(x_temp.index)
#输出的维度
y_output=len(y_temp.columns)

第四步:随机定义各个权重,这里需要设置的有x输入的权重U和输出的权重V,隐藏层的权重W可以不用自己设定

#设置权重,权重为随机数
weights={    
   'U':tf.Variable(tf.constant(0.25,shape=[x_inputs, y_output])),
   'V':tf.Variable(tf.random_normal([hidden_units, n_step])),}biases={    
   'U':tf.Variable(tf.constant(0.0, shape=[n_step,y_output])),
   'V':tf.Variable(tf.constant(0.0, shape=[n_step,])),}

第五步:计算的前期准备已经OK了,接下来可以进行计算了~按照上面图中的步骤:

(1)计算图中输入数据进行加权处理后得到的数据

 a(t)=b+Wh(t−1)+Uxta(t)=b+Wh(t−1)+Uxt 根据权重和偏执的设置,用此公式得出的是x最终的输入数据

x_in = tf.matmul(x, weights['U'])+biases['U']
x_in = tf.reshape(x_in, [-1, n_step, y_output])

(2)定义隐藏层的处理方式和计算出输出值

#定义隐藏层的处理方式(这里的函数是可以自行选择,可以多去探索一下)
cell = tf.nn.rnn_cell.LSTMCell(hidden_units)
#计算出隐藏层中每层的结果
outputs, states = tf.nn.dynamic_rnn(cell, x_in, dtype=tf.float32)
#outputs记录了隐藏层中每一层的输出,但是如果要计算出最后的输出,只需要最后一层即可
output = tf.transpose(outputs, [1,0,2])[-1]
#根据权重得到对y的估计值
results=tf.matmul(output, weights['V']) + biases['V']

(3)求出预测的误差,再根据误差大小和学习率用优化器调整权重设置。

#算误差
cost=tf.reduce_mean(tf.square(results-y))
#根据误差大小和学习率用优化器调整权重设置
train_op = tf.train.AdamOptimizer(0.1).minimize(cost)

第六步:进行多遍循环运行,并查看误差

#初始化
init = tf.global_variables_initializer()
#构建一个图
sess = tf.Session()
#先把图初始化
sess.run(init)
#运行30000次来调整权重,每1000次打印出误差和预测的y值
for i in range(30000):    

        sess.run(train_op)    
              if i % 1000 == 0:        
                  #由于学习出的结果过多,这里只显示最后一个值                print(sess.run(cost),sess.run(results[-1][-1]))

最后通过运行就可以看到训练的结果。

我们就可以看出,训练误差已经是非常的小了,这证明循环神经网络的学习能力还是很强的!我们可以通过调整里面的参数来建立自己的循环神经网络模型。

综上所述这里提供了一个经过循环神经网络算法来预测股票收盘价的模型训练过程,提供了该算法的思路流程。这里并没有使用模型预测的步骤,文章只是想讲解RNN,因此未包含模型预测部分,请知悉~

P.S. 注意!在实际应用中,训练中的误差不是越小越好~有的时候训练时样本误差很小,但到实验组时就会出现预测效率大大降低。这是由于学习过度也就是过拟合!所以说一定要掌握好一个合适的度!

4. 各种不同的循环神经网络

所以你以为循环神经网络就是这么简单吗...NO!循环神经网络可以再各处进行循环,例如:

这类RNN的唯一循环是从输出到隐藏层的反馈链接。

这类 RNN 是在时间序列结束时,具有单个输出。

RNN 有很多不同的种类,我们可以根据需要自己构建不同的 RNN 的模型。

循环神经网络就到这里就结束了!欢迎指正批评!

[Python人工智能] 十二.循环神经网络RNN和LSTM原理详解及TensorFlow编写RNN分类案例 从本专栏开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前一篇讲解了TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的神经网络。本文将详细讲解循环神经网络RNN和长短期记忆网络LSTM的原理知识,并采用TensorFlow实现手写数字识别的RNN分类案例。基础性文章,希望对您有所帮助。 阅读详情

相关推荐

Paypal开发者中心获取“ClientId”和“ClientSecret”参数

正式环境设置 1、登录到 paypal开发者中心 网址:https://developer.paypal.com/developer/ 点击右上角登录按钮登录 2、左侧栏 - 我的应用程序和凭证 - 点击“创建新应用” 新注册的paypal账号,需要进行邮箱验证,验证通过后,需要等待一段时间(或重新登录),才会出现相关设置项位置 验证邮箱通过后,点击创建新应用 3、按提示填写,保存创建应用 4、点击刚创建的应用进入应用详情页 5、应用详情页获得网站开发人员所需要的“ClientId”和“Client

龚清林的博客 1万+

【深度学习】循环神经网络(RNN)的tensorflow实现

【深度学习】循环神经网络(RNN)的tensorflow实现一、循环神经网络原理1.1、RNN的网络结构1.2、RNN的特点1.3、RNN的训练二、循环神经网络的tensorflow实现参考资料 循环神经网络又被成为时间递归神经网络(Recurrent Neural Networks),传统神经网络,每一个时间步隐含层神经元之间没有连接。但RNN中每一个时间步的隐含层输入由当前时间步的输入和上一时...

Luqiang_Shi的博客 3065

基于Python的微信聊天记录分析——数据获取

本篇为“基于Python的微信聊天记录分析”第一篇,主要涉及数据获取,包括Python环境配置、WeChatMsg项目配置和运行、获取聊天记录等内容,流程简单、比较基础,后续这个系列会涉及基于Python的数据处理、统计分析、NLP技术等内容。希望和大家多多交流,共同进步!

Henryli1202的博客 1万+

Tensorflow基础教程5:循环神经网络(RNN)讲解

在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。 循环神经网络(Recurrent Neural Network, RNN)是一种适宜于处理序列数据的神经网络,被广泛用于语言模型、文本生成、机器翻译等。   循环神经网络的工作过程   循环神经网络是一个处理时间序列数据的神经网络结构,也就是说,我们需...

iFlyAI的博客 992

Ubuntu 20.04 server 安装

Ubuntu 20.04 server 安装 前面我们介绍了 Ubuntu Desktop 版本的安装,今天我们来看看 Ubuntu server 版本的安装。Ubuntu Server 版本的安装和 Desktop 有很大的区别,并且全程不能使用鼠标,只能通过键盘。 从光盘或 U 盘启动到 Welcome 界面,选择语言,一般都是使用 English,所以保保持默认,直接按回车即可; 系统检测到了新的版本,问你是否是否更新,这里我们不需要安装新的版本,所以选项 Continue without upda

as900的博客 1万+

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 378

Tensorflow 实践RNN(一)

本博客记录使用tensorflow搭建rnn模型并用来对mnist的手写体进行识别的过程,记录其中的学习过程。 实践环境: Tensorflow version: 1.3.0 python version: 3.5 1.RNN快速介绍: 图1如上图所示,其中x是输入,s旁边的圆圈是隐层,而o旁边的圆圈表示输出。左边是RNN的第一种表示,可以看到在隐层中存在闭环。右图则是

jmhIcoding 2万+

5款免费二进制编辑器横向评测:从HxD到ImHex谁更适合你?

本文对5款免费二进制编辑软件进行深度横向评测,包括HxD、wxHexEditor、010 Editor、ImHex和GNU Emacs,涵盖从轻量级到专业级的各种需求。评测基于文件处理能力、编辑功能、分析工具等核心维度,为开发者、逆向工程师和安全研究人员提供实用选择指南,帮助用户根据具体场景选择最适合的二进制编辑工具。

weixin_29278805的博客 371

深度学习(07)_RNN-循环神经网络-02-Tensorflow中的实现

关于基本的RNN和LSTM的概念和BPTT算法可以查看这里 本文个人博客地址:http://lawlite.me/2017/06/16/RNN-%E5%BE%AA%E7%8E%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C-02Tensorflow%E4%B8%AD%E7%9A%84%E5%AE%9E%E7%8E%B0/ 参考文章: https://r2rt.com/

莫失莫忘的博客 2万+

Qwen2.5-Omni实战:5分钟搞定多模态AI模型本地部署(含Thinker-Talker架构解析)

本文详细介绍了Qwen2.5-Omni多模态AI模型的本地部署流程,包括硬件配置、环境准备和实战应用开发。特别解析了其创新的Thinker-Talker架构,该架构通过TMRoPE位置编码实现跨模态同步处理,大幅提升多模态任务效率。5分钟即可完成部署,适合开发者快速实现文本、图像和音频的联合处理。

weixin_29085865的博客 171

数据结构课程设计--基于知识图谱的中医食疗数据管理与应用

【代码】数据结构课程设计--基于知识图谱的中医食疗数据管理与应用。

M_inherit的博客 565

神经网络学习小记录2——利用tensorflow构建循环神经网络(RNN)

神经网络学习小记录2——利用tensorflow构建循环神经网络(RNN)学习前言RNN简介tensorflow中RNN的相关函数tf.nn.rnn_cell.BasicLSTMCelltf.nn.dynamic_rnn全部代码 学习前言 在前一段时间已经完成了卷积神经网络的复习,现在要对循环神经网络的结构进行更深层次的明确。 RNN简介 RNN 是当前发展非常火热的神经网络中的一种,它擅长对序...

Bubbliiiing的学习小课堂 7096

ardupilot开发 --- mavlink签名加密 篇

ardupilot开发 --- mavlink签名加密

记录老板的每次pua,分享领导每天的毒鸡汤... 1235

TensorFlow2.0 学习笔记(五):循环神经网络(RNN)

专栏——TensorFlow学习笔记 文章目录专栏——TensorFlow学习笔记一、什么是RNN二、文本生成1_读取文本2_模型实现3_超参数4_模型训练5_模型预测6_完整代码推荐阅读参考文章 一、什么是RNN 循环神经网络(Recurrent Neural Network, RNN) 是一种适宜于处理 序列数据 的神经网络,被广泛用于语言模型、文本生成、机器翻译等。基础知识可以看一下这个英文...

种树最好的时间是10年前,其次是现在!!! 5161

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Tensorflow与keras学习 (3)——循环神经网络RNN

循环神经网络RNN 3.1 RNN与LSTM介绍: 循环神经网络中的神经单元类似于模拟数字电路技术中的门电路,具有很多控制门来控制输入输出。 RNN结构: LSTM结构: 相比与传统的神经网络,RNN在上一层输入的基础上加入了一个x(该时刻)的输入,但是并不能解决长时间依赖。LSTM设计加入了忘记门,输入门,输出门,除了此时的输出还有一个该时刻的转态值,并独立传出到下一层。...

AI知识搬运工 1252

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

tensorflow 训练权重不更新_TensorFlow 学习之循环神经网络(RNN)

近期, JoinQuant 金融终端上线了python3.6版本,并且为小伙伴们带来了诸多重要更新:期权数据;支持 Tick 回测功能;研究示例文件增加了 TensorFlow、PyTorch 的安装教程;支持 pip 一键安装 TensorFlow、PyTorch、Keras 等深度学习库;组合优化更新:支持风险因子暴露限制、换手率限制、流动性限制、流动性限制、行业偏离度限制、追踪误差...

weixin_39922534的博客 569

深度学习TensorFlow2,循环神经网络(RNN,LSTM)系列知识

一:概述 二:时间序列 三:RNN 四:LSTM 一:概述 1、什么叫循环? 循环神经网络是一种不同于ResNet,VGG的网络结构,个人理解最大的特点就是:它通过权值共享,极大的减少了权值的参数量。举个例子那ResNet18做个练习往往就可以抛出成千上万的权值w,但在循环神经网络w的值也就那么几个然后每层都用他们这几个,构成了循环。 2 、 循环神经网络主要作用场景? 主要用于语言模型,文本生成,机器翻译。他们的一个特点就是数据是有序列可循的,举个例子:在进......

m0_52289494的博客 1198

【TensorFlow深度学习】循环神经网络RNN的基本结构与功能

循环神经网络RNN通过其独特的循环结构,实现了对序列数据的高效处理,打破了传统神经网络在处理时间序列数据上的局限。从语言模型到机器翻译,再到时间序列预测,RNN的应用展现了其在众多领域中强大的模型表达能力和实用性。通过上述代码实例,我们直观地理解了RNN的构造与训练过程,为深入探索其高级变种,如长短时记忆网络(LSTM)和门控单元等打下了坚实基础。RNN,无疑是深度学习领域中一颗璀璨的明珠,照亮了序列数据处理的无限可能。

沐风—云端行者 819

循环神经网络_TensorFlow 学习之循环神经网络(RNN)

近期,JoinQuant 金融终端上线了python3.6版本,并且为小伙伴们带来了诸多重要更新:期权数据;支持 Tick 回测功能;研究示例文件增加了 TensorFlow、PyTorch 的安装教程;支持 pip 一键安装 TensorFlow、PyTorch、Keras 等深度学习库;组合优化更新:支持风险因子暴露限制、换手率限制、流动性限制、流动性限制、行业偏离度限制、追踪误差限制、换手率...

weixin_39963534的博客 210

深度学习——文本、序列(循环神经网络RNN)(Tensorflow)笔记

深度学习——文本一、文本数据处理1、one-hot 编码 一、文本数据处理 文本进行分词,得到标记,对标记做one-hot编码或词嵌入。 1、one-hot 编码 分词—>添加索引—>编码 将每个单词与唯一的一个整数索引关联,将整数索引i转换为长度为N的二进制向量,该向量第i个元素为1,其余元素为0。 import numpy as np #单词级 samples = ['The cat set on the mat.','The dog ate my homework.'] token_in

qq_43842886的博客 1626

tensorflow2.0学习笔记: RNN 循环神经网络

基于IMDB数据实现文本情感分类循环神经网络: 简单的RNN:keras.layers.SimpleRNN() 双向RNN: keras.layers.Bidirectional(keras.layers.SimpleRNN()) import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline import numpy as np import sklearn import pandas as pd import o

凿井而饮的博客 695

深度学习-循环神经网络TensorFlow

深度学习-循环神经网络TensorFlow循环神经网络结构长短时记忆网络(LSTM)结构TensorFlow实现LSTM双向循环神经网络TensorFlow实现BiLSTM深层循环神经网络TensorFlow实现多层LSTM 循环神经网络结构 下图是一个典型的循环神经网络。循环神经网络的主体结构A的输入除了来自输入层xt,还有一个循环的边来提供上一时刻的隐藏状态ht−1。在每一时刻,循环神经网络的模块A在读取了xt和ht−1之后会生成新的隐藏状态ht,并产生本时刻的输出ot。循环神经网络当前的状态ht是根据

LaoChen_ZeroonE 1628

TensorFlow2 Python深度学习 - 循环神经网络(RNN)- 简介

TensorFlow2 Python深度学习 - 循环神经网络(RNN)- 简介

java1234的博客 974

深度学习 -- TensorFlow(9)循环神经网络RNN

目录 一、循环神经网络RNN介绍 二、Elman network && Jordan network 三、RNN的多种架构 1、一对一 2、多对一 3、多对多 4、 一对多 5、Seq2Seq 四、传统RNN的缺点 一、循环神经网络RNN介绍 循环神经网络 RNN 的基本结构是 BP 网络的结构,也是有输入层,隐藏层和输出层。只不过在 RNN 中隐藏层的输出不仅可以传到输出层,并且还可以传给下一个时刻的隐藏层。 从结构上可...

great_yzl的博客 2228

Tensorflow学习笔记11-循环神经网络 RNN

@TOC 循环神经网络 RNN 循环神经网络 RNN (Recurrent Neural Network) RNN 的用途 对于预测, 顺序排列十分重要. 我们可以预测下一个按照一定顺序排列的字, 但是打乱顺序, 我们就没办法分析自己到底在说什么了. 序列数据 那我们如何让数据间的关联也被 NN 加以分析呢? 想想我们人类是怎么分析各种事物的关联吧, 最基本的方式,就是记住之前发生的事情. 那我们让神经网络也具备这种记住之前发生的事的能力. 再分析 Data0 的时候, 我们把分析结果存入记忆. 然后当分

weixin_40852935的博客 267

自然语言菜鸟学习笔记(七):RNN(循环神经网络)及变体(LSTM、GRU)理解与实现(TensorFlow)

目录 前言 RNN(循环神经网络) 为什么要用循环神经网络(RNN)? 循环神经网络(RNN)可以处理什么类型的任务? 多对一问题 一对多问题 多对多问题 循环神经网络结构 单层网络情况 正向传播 反向传播 存在问题 优化方案 多层网络情况 双向网络结构 LSTM(Long Short Term Memory)长短期记忆网络 LSTM与RNN的不同 选择性机制的...

心有猛虎 细嗅蔷薇 4827
上一篇: “降准”带来大牛市? 量化测算PMI 社融 汇率等宏观数据A股择时效果
下一篇: 【年度福利】聚宽2018年度评选+精选文章合集
Quant_
博客等级 码龄11年 393粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值