MachineLearning(12)- RNN-LSTM-tf.nn.rnn_cell

RNN-LSTM

  • 1.RNN
  • 2.LSTM
  • 3. tensorflow 中的RNN-LSTM
    • 3.1 tf.nn.rnn_cell.BasicRNNCell()
    • 3.2 tf.nn.rnn_cell.BasicLSTMCell()
    • 3.3 tf.nn.dynamic_rnn()--多步执行循环神经网络

1.RNN

RNN-Recurrent Neural Network-循环神经网络

RNN用来处理序列数据。多层感知机MLP层间节点全联接,层内节点并无链接。 RNN层内节点的之间存在连接关系,用来反映上一层隐层状态作为下一层的输入,将直接输给中间隐藏层。

RNN网络模块图如下所示:
在这里插入图片描述
其中: xtx_txt 网络t时刻输入, hth_tht 网络t时刻的输出。 如果将RNN按时间序列展开,可以得到以下链式结构:

在这里插入图片描述
用简单的权重矩阵建模rnn, 输入-状态-输出之间存在以下的关系:[oto_tot即上文的hth_tht]
在这里插入图片描述
st=f(U⋅xt+W⋅st−1)s_{t} = f(U\cdot x_t + W\cdot s_{t-1})st=f(Uxt+Wst1)
ot=g(V⋅st)o_t = g(V\cdot s_t)ot=g(Vst)

st−1s_{t-1}st1能够建模历史信息对当前输出的影响。原始RNN随着时间的推移,历史状态对当前输出的影响减弱。但是很多任务需要长时依赖关系。LSTM营运而生。

2.LSTM

LSTM-Long Short-Term Memory 可以学习长时依赖信息,LSTM网络模块图如下所示:
在这里插入图片描述
状态传递机制决定了上一时刻状态信息的保留量,以及新输入信息的增量。LSTM包含三个关键的门用于实现这一传递机制。
在这里插入图片描述
**遗忘门:**上一时刻输出和这一个时刻输入决定上一时刻的状态保留百分比ftf_tft。【sigmoid输出0-1 之间的一个数】
在这里插入图片描述
输入门:C~t\tilde{C}_tC~t为新信息候选向量, iti_tit 决定了多少新信息候选向量能够通过。随后更新状态信息:
在这里插入图片描述
在这里插入图片描述
输出门: 当前状态CtC_tCtht−1h_{t-1}ht1 以及xtx_txt 共同决定当前时刻输出信息hth_tht

在这里插入图片描述

参考资料:https://colah.github.io/posts/2015-08-Understanding-LSTMs/

3. tensorflow 中的RNN-LSTM

RNNCell是TensorFlow中实现RNN的基本单元,每个RNNCell都有一个call方法,使用方式是:(output, next_state) = call(input, state)。RNNCell是一个抽象类,实际使用时候,用它的两个子类BasicRNNCell [RNN的基础类] 和BasicLSTMCell [LSTM的基础类]。

3.1 tf.nn.rnn_cell.BasicRNNCell()

RNNCell,具有两个比较重要类属性:state_size–决定隐层的大小,output_size决定输出大小
例如将(batch_size, input_size)数据输入RNN,得到的隐层状态就是(batch_size, state_size),输出是(batch_size, output_size)。

import tensorflow as tf
import numpy as np
cell = tf.nn.rnn_cell.BasicRNNCell(num_units=128) # state_size = 128
print(cell.state_size)                            # 128inputs = tf.placeholder(np.float32, shape=(32, 100)) # batch_size=32
h0 = cell.zero_state(32, np.float32) # 全零状态(batch_size, state_size)
output, h1 = cell.call(inputs, h0)
print(h1.shape)                            # (32, 128)

3.2 tf.nn.rnn_cell.BasicLSTMCell()

tf.nn.rnn_cell.BasicLSTMCell(num_units,              # int类型,隐层输出大小forget_bias=1.0,        # float类型, 遗忘门偏置state_is_tuple=True,    # 回的状态是h_t和c_t的2元tuple  LSTM可以看做有两个隐状态h和cactivation=None,        # 内部状态的激活函数。默认为tanhreuse=None,name=None,dtype=None

3.3 tf.nn.dynamic_rnn()–多步执行循环神经网络

基础的RNNCell使用它的call函数进行运算时,只是在序列时间上前进了一步。例如使用(x1,h0)得到h1,(x2, h1)得到h2等。如果序列长度为10,需调用10次call函数,比较麻烦。

TensorFlow提供了一个tf.nn.dynamic_rnn函数,该函数可实现n次调用call函数。即通过{h0,x1, x2, …., xn}得{h1,h2…,hn}。

输入数据格式为(batch_size, time_steps, input_size),其中time_steps表示序列长度,input_size表示单个序列元素的特征长度。

tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None, dtype=None,parallel_iterations=None, swap_memory=False, time_major=False, scope=None
)

对于一个定义的的cell ,多次执行该cell 的demo 为:

outputs, state = tf.nn.dynamic_rnn(cell, inputs, initial_state=initial_state)
# outputs就是time_steps步里所有的输出-(batch_size, time_steps, cell.output_size)。state是最后一步的隐状态,它的形状为(batch_size, cell.state_size)。

动态调整sequence_length tf.nn.dynamic_rnn 详解

参考资料:
tensorflow学习之BasicLSTMCell详解
TensorFlow中RNN实现的正确打开方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断微信小游戏用户是否真的分享

作为开发者,传统的微信分享拿到分享的状态码并不能完全确定玩家是否分享到好友或群。 因此一部分开发者给分享做一个定时器,超过5秒就判定玩家分享成功,实际上很容易被玩家利用。 因此我们可以利用微信分享过程中的图片url链接做文章: 1.需要一个web服务器,提供给客户端…

Leaf服务器框架从入门到放弃(一)认识Leaf和安装Leaf环境

首先我简单介绍下Leaf服务器,下面这段描述是我摘自github官方README说明: Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏服务器框架。Leaf 适用于各类游戏服务器的开发,包括 H5(HTML5)游戏服务器。 Leaf 的关注点:…

Linux Command List

Linux Command ListLinux Command List)todops auxsednohupnvidia-smisnaptorch.cuda.is_available()Linux Command List) Linux(1)-touch,mkdir,rm,mv,cp,ls,cd,cat Linux(2)-tar,find,grep,xargs Linux(3)-网-ifconfig,ping,ssh Linux(4)-资源-du,top,free,gnome Linux(…

JS演示图论汇总

BFS.js var BFSClass function () {this.isVisit new Array();this.adj new Array();this.vQueue new Array();this.curV;this.temp new Array();this.init function (beginV) {this.curV null;this.temp [];//初始化顶点访问数组this.isVisit [];for (var i 0; i &…

Shell脚本自动监控docker容器的状态

首先我们来写一个脚本rootserver:~# cat docker_monitor.sh #!/bin/bash #监控容器的运行状态 #容器名称 传入参数 containerName$1 #当前时间 nowdate "%Y-%m-%d %H:%M:%S"# 查看进程是否存在 existdocker inspect --format {{.State.Running}} ${containerNam…

Python模块(9)-Time,Json 简易使用教程

Time,Json简易使用教程1 Time1.1 获取时间1.2 程序计时2 Json1 Time Python中内置了一些与时间处理相关的库,如time、datatime和calendar库。其中time库是Python中处理时间的标准库,是最基础的时间处理库,提供如下功能功: &#…

AWS的VPC使用经验(一)

Amazon VPC 概念 Amazon VPC 是 Amazon EC2 的网络化阶层。如果您是首次使用 Amazon EC2,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的什么是 Amazon EC2?以获取简要概述。 以下是 VPC 的主要概念: Virtual Private Cloud (VPC) 是仅适用于您的 AWS 账户的虚拟网…

AWS的VPC使用经验(二)

上文说了如何创建自定义VPC网络的EC2实例,这节说如何在多个VPC之间创建对等连接。 这里分别填写自己的VPC和对方的VPC的ID信息,然后在对方的VPC里就能看到有连接请求,在对方的连接请求里选择 “操作”->接受。 到这里已经快要收尾了&…

ML Tools List

文章目录1.Pyorch2.TensorFlow3. Other1.Pyorch Pytorch(1)-内置/自己设计的损失函数使用 Pytorch(2)-tensor常用操作 Pytorch(3)–数据载入接口:Dataloader、datasets Pytorch(4)-模型保存-载入-eval() Pytorch(5)-梯度反向传播 Pytorch(6)–设置随机种子&am…

ubuntu nginx配置负载均衡篇(一)

Nginx 代理服务的配置说明 1、设置 404 页面导向地址 error_page 404 https://www.runnob.com; #错误页 proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off。 2、如果我们的代理只允许接受get,post请求…

坦克大战

效果 map.js var map4 [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,2,0,0,2,2,0,0,0,2,2,0,0,2,2,0,0,2,2,0,2,2,0],[0,2,2,0,0,2,2,0,0,0,2,2,3,3,2,2…

ubuntu nginx配置负载均衡篇(二)

这里提供部分我的配置文件: nginx.conf: user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on; }http {### Basic Settings##sendfile on;tcp_nopush on;tcp_nodelay…

Papar Notes List

PaperNotes(1)-Modeling the World from Internet Photo Collections PaperNotes(2)-Generative Adversarial Nets PaperNotes(3)-图像分割-RCNN-FCN-Boxsup PaperNotes(4)-高质量图像生成-cgan,stackgan,lapgan,cyclegan,pix2pixgan PaperNotes(5)-Conditional Generative Adv…

windows安装 MySQL5.7服务端

1,安装https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.30-winx64.zip mysql安装包。 2. 自己配置my.ini [client] port=3306 [mysql] default-character-set=utf8[mysqld] character-set-server=utf8 port=3306 basedir="D:/mysql-5.7.30-winx64/" datad…

screen命令使用说明

有些程序写的很操蛋,比如放到后台执行,但后边还需要再切回前台来重新执行,这个时候我们选择screen工具: screen -d -m -S LoginServer[6001] ./run_login_server.sh 具体的screen命令包含哪些参数,可以参考scree…

看这玩意复习你还会挂科?《数据结构篇》

一.绪论 1.何谓程序设计? 程序 算法 数据结构 2.数据结构的定义 是相互之间存在一种或多种特定关系的数据元素的集合 3.数据、数据元素、数据对象的概念 数据(data):对客观事物的符号表示,含义很广&am…

Machine Learning List

机器学习: 每多加一个符号,就多加一个变量。 每次确定给定量,其余均可变,方便分析问题。 MachineLearning(1)-激活函数sigmoid、损失函数MSE、CrossEntropyLoss MachineLearning(2)-图像分类常用数据集 MachineLearning(3)-流型 …

反编译用unity打包的资源文件

如何反编译破解别人家的游戏包,美术资源是维权和侵权一直杠下去的话题,如果作为商业用途,我是反对破坏原作者的创意,侵害作者的劳动果实行为。但是如果是仅仅为了学习,实验,不妨参考我的文章,我相信你可以从我的文章里获取如何破解通过unity打包的移动游戏美术资源。 之…

看这玩意复习你还会挂科?《网络原理篇》

第一章 概述 计算机网络的功能 连通性、共享 【连通性:是计算机网络使上网用户之间都可以交换信息,好像这些用户的计算机都可以彼此直接连接一样。用户之间的距离也似乎因此而变近了。共享:是指资源共享,它的含义是多方面的&…

苹果订阅服务器端开发

有时候我们想做一个苹果订阅功能,需要在苹果开发者后台添加订阅商品productid/ 订阅需要增加一个参数: password: 秘钥, 就可以了, 但是官方文档说秘钥仅仅用在自动续订上面 大家叫后台加个验证,如果苹果验证返回21004的话(21004 你提供的共享密钥和账户的共享密钥不一致)…