rnn

RNN & LSTM 学习笔记 —— Anaconda安装,Python安装,PyTorch,Tensorflow配置

寵の児 提交于 2020-01-27 01:38:03
学习(配置基础环境,下载开发IDE) 配置环境 Anaconda:官网下载 https://www.anaconda.com/distribution/ (python 2+ 官方停止更新了,所以还是下载python 3+的吧) Anaconda下载安装好了之后,就可以用这个工具来下载其他的工具了,包括python其他版本。 python3.6 or 3.7 Anaconda最新版本是Python37的,但是由于Tensorflow并不支持Python37,除了PyTorch还想以后多学学Tensorflow和其他,所以多配置一步python 3.6。 打开Anaconda Prompt并输入: conda create - n py36 python=3 . 6 anaconda 安装好之后,会多出py36的命令行Prompt。之后安装各种库,要安装到python3.7环境下,就用Prompt(Anaconda3),要安装在python3.6环境下,就用Prompt(py36) 下载好用的pythonIDE ——pycharm 安装和配置如下链接: https://www.runoob.com/w3cnote/pycharm-windows-install.html Tensorflow安装 在对应的Prompt 命令行里面 pip install -- upgrade --

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

岁酱吖の 提交于 2020-01-26 13:39:29
文章目录 什么是循环神经网络 RNN的应用 RNN网络结构 RNN的反向求导 Vanilla-RNN Vanilla-RNN存在的问题 RNN动态图 梯度消失 梯度消失带来的影响 梯度爆炸 梯度消失带来的影响 RNN的反向传播 Bidirectional RNN(双向的RNN) Deep(Bidirectional) RNN(深度的双向RNN) LSTM(长短时记忆) LSTM关键:“细胞状态” 第一个“门”——“忘记门” 第二个“门”——“学习门”: 第三个“门”——“记忆门”: 第四个“门”——“使用门”: lstm动态图展示 LSTM可以使用别的激活函数吗? LSTM-总结 GRU GRU动图 LSTM与GRU区别 什么是循环神经网络 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) 它并⾮刚性地记忆所有固定⻓度的序列,而是通过隐藏状态来存储之前时间步的信息。 为什么有BP神经网络、CNN,还需要RNN? 因为PB,CNN网络(前馈神经网络)的输入输出都是相互独立的(只能正向或者反向传播的,单向的),但是实际应用中的有些场景的输出内容和之前的内容相关的(时序性)

[RNN]RNNLM模型

让人想犯罪 __ 提交于 2020-01-25 03:34:40
前面的所有模型,思考角度都是从当前全连接的神经网络架构下的,最大的局限就是n,即只能根据,且仅仅是n个词,来预测下一个词的功能。随着RNN的普及,通过输入词序列的方式来“动态”输出下一个词得以实现。RNN的具体概念可以查看之前的RNN草图,这里只是再做一个比方来辅助记忆,RNN看似是时间序列的叠加,最终形成的结果,就像开发一个软件一样,不断的进行迭代。但是,如果从观察者的角度,总有一天,整个软件是开发完毕了。如果在那一天,将所有的迭代过程“平铺”开来看的话,其实RNN也就是一个深n层的深度全连接神经网络(当然RNN的变体会稍微有一些其他部分的功能,和全连接略有区别)。所以,RNN就是一个深度为n的神经网络,而这个n随着输入进行动态变化,就好像一个用static变量记忆的函数,函数内部会记忆一个值,看似每次调用一个函数,其实每次的函数输出,不仅仅和输入值有关,还和之前的所有调用导致的记忆有关,其实RNN利用的就是这个原理来进行实现的(将RNN的整个处理过程看成是一个函数的输入和输出的话,就是这样的。我们输入的特征值就是函数的入参,我们RNN的隐藏层的输出再函数的内部会自己保存一份static变量,同时输出出来(对于RNN来说,隐藏层的输出如果要用就用不用就不用。当然,RNN也有问题,就是随着序列的增加,深度增加太多,容易在反向传播算法进行参数优化的时候,出现梯度弥散和消失的情况

pytorch学习-- RNN, RNNCell

丶灬走出姿态 提交于 2020-01-24 02:48:35
文章目录 循环神经网络 RNN Layer 多层RNN nn.RNNCell 梯度爆炸 梯度离散 循环神经网络 h t 来 自 h t − 1 与 x t h_t 来自h_{t-1}与x_t h t ​ 来 自 h t − 1 ​ 与 x t ​ 求解导数 RNN Layer [ b a t c h , f e a t u r e L e n ] @ [ h i d d e n L e n , f e a t u r e L e n ] T [batch, featureLen]@[hiddenLen, featureLen]^T [ b a t c h , f e a t u r e L e n ] @ [ h i d d e n L e n , f e a t u r e L e n ] T [ b a t c h , h i d d e n L e n ] @ [ h i d d e n L e n , h i d d e n L e n ] T [batch, hiddenLen]@[hidden Len, hiddenLen]^T [ b a t c h , h i d d e n L e n ] @ [ h i d d e n L e n , h i d d e n L e n ] T 对应 x t @ W x h + h t @ W h h x_t@W_{xh} +

Pytorch基础——使用 RNN 生成简单序列

 ̄綄美尐妖づ 提交于 2020-01-23 19:39:18
一、介绍 内容 使用 RNN 进行序列预测 今天我们就从一个基本的使用 RNN 生成简单序列的例子中,来窥探神经网络生成符号序列的秘密。 我们首先让神经网络模型学习形如 0^n 1^n 形式的上下文无关语法。然后再让模型尝试去生成这样的字符串。在流程中将演示 RNN 及 LSTM 相关函数的使用方法。 实验知识点 什么是上下文无关文法 使用 RNN 或 LSTM 模型生成简单序列的方法 探究 RNN 记忆功能的内部原理 二、什么是上下文无关语法 上下文无关语法 首先让我们观察以下序列: 01 0011 000111 00001111 …… 它们有什么特点和规律呢? 它们都只含有 0 和 1 并连续地出现,序列长度并不相等,但在每条序列中 0 和 1 的个数是相等的。我们可以用一个简单的数学表达式来表述所有这些 01 序列的通用规律,其实就是 0^n 1^n,其中 n 就是序列中 0 或者 1 的个数。这样的序列看似简单,但其实它在计算机科学中有一个非常响亮的名字,叫做“上下文无关文法”(Context-free grammar)。所谓上下文无关文法,简单来说,就是可以被一组替代规则所生成,而与本身所处的上下文(前后出现的字符)无关。 上下文无关语法序列的生成 针对上面这种 0^n 1^n 形式的上下文无关语法序列,我们人类要学会数出 0 的个数 n,这样也就自然知道了 1 的个数

TensorFlow 实现 RNN 入门教程

懵懂的女人 提交于 2020-01-20 18:31:57
转子: https://www.leiphone.com/news/201705/zW49Eo8YfYu9K03J.html 最近在看RNN模型,为简单起见,本篇就以简单的二进制序列作为训练数据,而不实现具体的论文仿真,主要目的是理解RNN的原理和如何在TensorFlow中构造一个简单基础的模型架构。其中代码参考了这篇博客。 数据集 首先我们看一下实验数据的构造: 输入数据X:在时间t,Xt的值有50%的概率为1,50%的概率为0; 输出数据Y:在实践t,Yt的值有50%的概率为1,50%的概率为0,除此之外,如果`Xt-3 == 1`,Yt为1的概率增加50%, 如果`Xt-8 == 1`,则Yt为1的概率减少25%, 如果上述两个条件同时满足,则Yt为1的概率为75%。 可知,Y与X有两个依赖关系,一个是t-3,一个是t-8。我们实验的目的就是检验RNN能否捕捉到Y与X之间的这两个依赖关系。实验使用交叉熵作为评价标准,则有下面三条理想的实验结果: 如果RNN没有学习到任何一条依赖,那么Yt为1的概率就是0.625(0.5+0.5*0.5-0.5*0.25),所以所获得的交叉熵应该是0.66(-(0.625 * np.log(0.625) + 0.375 * np.log(0.375)))。 如果RNN学习到第一条依赖关系,即Xt-3为1时Yt一定为1。那么

《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论

纵然是瞬间 提交于 2020-01-20 04:46:12
转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/article/details/51446558 http://blog.csdn.net/caimouse/article/details/70225998 http://kubicode.me/2017/05/15/Deep%20Learning/Understanding-about-RNN/ RNN(Recurrent Neuron Network)是一种对序列数据建模的神经网络。继Bengio提出基于神经网络的概率语言模型并获得成功之后,Mikolov于2010年提出利用RNN建模语言模型,2012年Sundermeyer提出RNN的改进版本--LSTM。近两年,RNN开始在自然语言处理、图像识别、语音识别等领域迅速得到大量应用。因项目需要,近期重点学习研究了这几类学习模型,DNN、RNN、LSTM等,后面会陆续把学习总结记录并发布出来,首先为了自己加深印象,其次如果能对他人提供些许帮助就更好了。   循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Processing, NLP

循环神经网络(RNN, Recurrent Neural Networks)介绍

谁说我不能喝 提交于 2020-01-20 04:45:27
原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考: http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/ ,在这篇文章中,加入了一些新的内容与一些自己的理解。   循环神经网络(Recurrent Neural Networks,RNNs)已经在众多 自然语言 处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用。但是,目前网上与RNNs有关的学习资料很少,因此该系列便是介绍RNNs的原理以及如何实现。主要分成以下几个部分对RNNs进行介绍: 1. RNNs的基本介绍以及一些常见的RNNs(本文内容); 2. 详细介绍RNNs中一些经常使用的训练 算法 ,如Back Propagation Through Time(BPTT)、Real-time Recurrent Learning(RTRL)、Extended Kalman Filter(EKF)等学习算法,以及梯度消失问题(vanishing

卷积神经网络CNN在序列处理中的应用

坚强是说给别人听的谎言 提交于 2020-01-19 02:22:59
众所周知,CNN在机器视觉问题上表现出色,因为它能够进行卷积运算,从局部输入图块中提取特征,并能够将表示模块化,同时可以高效利用数据。 这些性质让卷积神经网络在计算机视觉领域表现优异,同样也让他对序列处理特别有效。时间可以被看做一个空间维度,就像二维图像的高度或宽度。 对于某些序列处理问题,这种一维卷积神经网络的效果可以媲美RNN,而且计算代价通常要小很多。最近,一维卷积神经网络【通常与空洞卷积核(dilated kernel)一起食用】已经在音频生成和机器翻译领域取得了巨大成功。对于文本分类和时间序列预测等简单任务,小型的一维卷积神经网络可以代替RNN,而且速度更快。 序列数据的一维池化 CNN中提到了二维池化运算,比如二维平均池化和二维最大池化,在卷积神经网络中用于对图像张量进行空间下采样。一维也可以做相同的池化运算:从输入中提取一维序列短(即子序列),然后输出其最大值(最大池化)或平均值(平均池化)。与二维卷积神经网络一样,该运算也是用于降低一维输入的长度(子采样)。 结合CNN和RNN来处理长序列 一维卷积神经网络分别处理每个输入序列段,所以它对时间步的顺序不敏感(此处说的顺序范围要大于局部尺度,即大于卷积窗口的大小),这一点与RNN不同。 为了识别更长期的模式,可以将许多卷积层和池化层堆叠在一起,这样上面的层能够观察到原始输入中更长序列段

使用RNN时,cell的设置

馋奶兔 提交于 2020-01-15 05:19:34
使用静态rnn处理时序数据 import tensorflow as tf from tensorflow . contrib import rnn x = tf . placeholder ( "float" , [ None , time_steps , length ] ) y = tf . placeholder ( "float" , [ None , n_classes ] ) input = tf . unstack ( x , time_steps , 1 ) lstm_layer = rnn . BasicLSTMCell ( num_units , forget_bias = 1 ) #lstm_layer=rnn.LSTMCell(num_units,use_peepholes=True,forget_bias=1) outputs , _ = rnn . static_rnn ( lstm_layer , input , dtype = "float32" ) 使用动态rnn处理时序数据 import tensorflow as tf from tensorflow . contrib import rnn x = tf . placeholder ( "float" , [ None , time_steps , length ] ) y = tf .