rnn

循环神经网络 简易使用

…衆ロ難τιáo~ 提交于 2020-02-16 01:22:56
循环神经网络 本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型。我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量H,用Ht表示H在时间步t的值。Ht的计算基于Xt和Ht−1,可以认为Ht记录了到当前字符为止的序列信息,利用Ht对序列的下一个字符进行预测。 循环神经网络的构造 我们先看循环神经网络的具体构造。假设Xt∈Rn×d是时间步t的小批量输入,Ht∈Rn×h是该时间步的隐藏变量,则: Ht=ϕ(XtWxh+Ht−1Whh+bh). 其中,Wxh∈Rd×h,Whh∈Rh×h,bh∈R1×h,ϕ函数是非线性激活函数。由于引入了Ht−1Whh,Ht能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于Ht的计算基于Ht−1,上式的计算是循环的,使用循环计算的网络即循环神经网络(recurrent neural network)。 在时间步t,输出层的输出为: Ot=HtWhq+bq. 其中Whq∈Rh×q,bq∈R1×q。 从零开始实现循环神经网络 我们先尝试从零开始实现一个基于字符级循环神经网络的语言模型,这里我们使用周杰伦的歌词作为语料,首先我们读入数据: In [1]: import torch import torch.nn as nn import time import math

Pytorch深度学习(2) -- RNN及其进阶模型实现 ( GRU LSTM Deep-Rnn Bi-Rnn)

夙愿已清 提交于 2020-02-16 01:04:31
Pytorch深度学习(2) -- RNN及其进阶模型实现 0 预测训练函数 1.RNN实现 RNN小结 2.GRU实现 GRU小结 3.LSTM实现 LSTM小结 4.Deep-RNN 加入参数num_layers=2 5.Bi-Rnn实现 加入参数bidirectional=True 0 预测训练函数 def train_and_predict_rnn ( rnn , get_params , init_rnn_state , num_hiddens , vocab_size , device , corpus_indices , idx_to_char , char_to_idx , is_random_iter , num_epochs , num_steps , lr , clipping_theta , batch_size , pred_period , pred_len , prefixes ) : if is_random_iter : data_iter_fn = d2l . data_iter_random else : data_iter_fn = d2l . data_iter_consecutive params = get_params ( ) loss = nn . CrossEntropyLoss ( ) for epoch in range (

你不得不了解的深度学习知识(一)

自古美人都是妖i 提交于 2020-02-15 14:08:34
你不得不了解的深度学习知识(一) 1 深度学习 深度学习是机器学习的一个分支(最重要的分支) 机器学习是人工智能的一个分支 (1)大白话解释深度学习 假设深度学习要处理的信息是“水流”,而处理数据的深度学习网络是一个由管道和阀门组成的巨大水管网络。网络的入口是若干管道开口,网络的出口也是若干管道开口。这个水管网络有许多层,每一层由许多个可以控制水流流向与流量的调节阀。根据不同任务的需要,水管网络的层数、每层的调节阀数量可以有不同的变化组合。对复杂任务来说,调节阀的总数可以成千上万甚至更多。水管网络中,每一层的每个调节阀都通过水管与下一层的所有调节阀连接起来,组成一个从前到后,逐层完全连通的水流系统。 那么,计算机该如何使用这个庞大的水管网络来学习识字呢? 比如,当计算机看到一张写有“田”字的图片,就简单将组成这张图片的所有数字(在计算机里,图片的每个颜色点都是用“0”和“1”组成的数字来表示的)全都变成信息的水流,从入口灌进水管网络。 我们预先在水管网络的每个出口都插一块字牌,对应于每一个我们想让计算机认识的汉字。这时,因为输入的是“田”这个汉字,等水流流过整个水管网络,计算机就会跑到管道出口位置去看一看,是不是标记由“田”字的管道出口流出来的水流最多。如果是这样,就说明这个管道网络符合要求。如果不是这样,就调节水管网络里的每一个流量调节阀,让“田”字出口“流出”的水最多。 这下

Pytorch学习笔记 Task02

混江龙づ霸主 提交于 2020-02-15 11:19:28
第一部分:文本预处理 文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤: 读入文本 分词 建立字典,将每个词映射到一个唯一的索引(index) 将文本从词的序列转换为索引的序列,方便输入模型 #读入文本 import collections import re def read_time_machine ( ) : with open ( '/home/kesci/input/timemachine7163/timemachine.txt' , 'r' ) as f : lines = [ re . sub ( '[^a-z]+' , ' ' , line . strip ( ) . lower ( ) ) for line in f ] return lines lines = read_time_machine ( ) print ( '# sentences %d' % len ( lines ) ) #分词: def tokenize ( sentences , token = 'word' ) : """Split sentences into word or char tokens""" if token == 'word' : return [ sentence . split ( ' ' ) for

6.5 循环神经网络的简洁实现

心不动则不痛 提交于 2020-02-15 10:10:00
6.5.1 定义模型 Mxnet: num_hiddens = 256 rnn_layer = rnn . RNN ( num_hiddens ) rnn_layer . initialize ( ) batch_size = 2 state = rnn_layer . begin_state ( batch_size = batch_size ) state [ 0 ] . shape num_steps = 35 X = nd . random . uniform ( shape = ( num_steps , batch_size , vocab_size ) ) Y , state_new = rnn_layer ( X , state ) Y . shape , len ( state_new ) , state_new [ 0 ] . shape # 本类已保存在d2lzh包中方便以后使用 class RNNModel ( nn . Block ) : def __init__ ( self , rnn_layer , vocab_size , ** kwargs ) : super ( RNNModel , self ) . __init__ ( ** kwargs ) self . rnn = rnn_layer self . vocab_size = vocab

循环神经网络实现创作歌词

我的梦境 提交于 2020-02-15 09:11:17
介绍 假设 X t ∈ R n × d X_t∈\R^{n×d} X t ​ ∈ R n × d 是时间步 t t t 的小批量输入, H t ∈ R n × h H_t∈\R^{n×h} H t ​ ∈ R n × h 是该时间步的隐藏变量,则: H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_t=ϕ(X_t W_{xh}+H_{t−1}W_{hh}+b_h) H t ​ = ϕ ( X t ​ W x h ​ + H t − 1 ​ W h h ​ + b h ​ ) 其中, W x h ∈ R d × h W_{xh}∈\R^{d×h} W x h ​ ∈ R d × h , W h h ∈ R h × h W_{hh}∈\R^{h×h} W h h ​ ∈ R h × h , b h ∈ R 1 × h b_h∈\R^{1×h} b h ​ ∈ R 1 × h , ϕ ϕ ϕ 函数是非线性激活函数。由于引入了 H t − 1 W h h H_{t−1}W_{hh} H t − 1 ​ W h h ​ , H t H_t H t ​ 能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于 H t H_t H t ​ 的计算基于 H t − 1 H_{t−1} H t − 1 ​ ,上式的计算是循环的

动手学深度学习第六课:循环神经网络基础

ぃ、小莉子 提交于 2020-02-15 08:49:24
循环神经网络 以循环神经网络实现语言模型为例。 下面分析构造。假设 X t ∈ R n × d X_t\in\mathbb{R}^{n\times d} X t ​ ∈ R n × d 是时间步 t t t 的小批量输入, H t ∈ R n × h H_t\in\mathbb{R}^{n\times h} H t ​ ∈ R n × h 是该时间步的隐藏变量,则 H t = Φ ( X t W x h + H t − 1 W h h + b h ) . H_t = \Phi(X_tW_{xh}+H_{t-1}W_{hh}+b_h). H t ​ = Φ ( X t ​ W x h ​ + H t − 1 ​ W h h ​ + b h ​ ) . 对于每一个字符和每一个隐藏变量都用一个向量来表示,这里的 d d d 和 h h h 分别表示两个向量的长度。 W x h ∈ d × h , W h h ∈ R h × h , b ∈ R 1 × h W_{xh}\in\mathbb{d\times h}, W_{hh}\in\mathbb{R}^{h\times h},b\in\mathbb{R}^{1\times h} W x h ​ ∈ d × h , W h h ​ ∈ R h × h , b ∈ R 1 × h ,由此知 X t W x h ∈ R n × h , H t

DataWhale组队打卡学习营task02-3

北城余情 提交于 2020-02-15 05:22:47
循环神经网络 从零开始实现循环神经网络 我们先尝试从零开始实现一个基于字符级循环神经网络的语言模型,这里我们使用周杰伦的歌词作为语料,首先我们读入数据: import torch import torch . nn as nn import time import math import sys sys . path . append ( "/home/kesci/input" ) import d2l_jay9460 as d2l ( corpus_indices , char_to_idx , idx_to_char , vocab_size ) = d2l . load_data_jay_lyrics ( ) device = torch . device ( 'cuda' if torch . cuda . is_available ( ) else 'cpu' ) one-hot向量 我们需要将字符表示成向量,这里采用one-hot向量。假设词典大小是N,每次字符对应一个从0到N-1的唯一的索引,则该字符的向量是一个长度为N的向量,若字符的索引是i,则该向量的第i个位置为1,其他位置为0。下面分别展示了索引为0和2的one-hot向量,向量长度等于词典大小。 def one_hot ( x , n_class , dtype = torch . float32 ) :

动手学深度学习之循环神经网络基础

时光毁灭记忆、已成空白 提交于 2020-02-14 22:52:38
循环神经网络 本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型。其目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量 H H H ,用 H t H_t H t ​ 表示 H H H 在时间步 t t t 的值。 H t H_t H t ​ 的计算基于 X t X_t X t ​ 和 H t − 1 H_{t-1} H t − 1 ​ ,可以认为 H t H_t H t ​ 记录了到当前字符为止的序列信息,利用 H t H_t H t ​ 对序列的下一个字符进行预测。 #### 循环神经网络的构造 假设 X t ∈ R n × d X_t\in R^{n\times d} X t ​ ∈ R n × d 是时间步 t t t 的小批量输入, H t ∈ R n × h H_t\in R^{n\times h} H t ​ ∈ R n × h 是该时间步的隐藏变量,则: H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_t=\phi(X_tW_{xh}+H_{t-1}W_{hh}+b_h) H t ​ = ϕ ( X t ​ W x h ​ + H t − 1 ​ W h h ​ + b h ​ ) 其中, W x h ∈ R d × h W_{xh}\in R^{d\times h} W

【深度学习基础】从零开始的炼丹生活09——循环神经网络

我只是一个虾纸丫 提交于 2020-02-08 01:24:03
往期回顾: 06——深度学习中的正则化 07——深度模型中的优化 08——卷积网络 为了处理一维序列数据,我们转向神经网络框架中另一强大的特化,循环神经网络。(主要参考《深度学习》和cousera上吴恩达的课程) 循环神经网络 (recurrent neural network)或 RNN ,是一类用于处理序列数据的神经网络。大多数循环网络都能处理可变长度的序列。循环网络强调参数共享,这使得模型能够扩展到不同形式的样本并进行泛化。例如 “我八点吃的早饭” 和 “我早饭在八点吃” ,要提取时间信息。如果我们训练一个前馈网络,需要分别学习句子每个位置的所有语言规则,而循环网络在几个时间步内共享相同的权重,不需要在每个位置都分别学习。 循环网络的计算图有两种表现方式,如图。左边循环图展开后就是右边展开图。 一、循环神经网络 RNN 的设计模式主要有以下几种: 每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络。如图: 每个时间步产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络。如图: 隐藏单元之间存在循环连接,读取整个序列后产生单个输出的循环网络,如图: 现在我们研究第一种情形的 RNN 前向传播公式。这种循环网络可以计算任何图灵可计算的函数。我们使用 tanh 作为激活函数,RNN 从特定的初始状态 h ( 0 ) \boldsymbol h^{(0)