版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
循环神经网络《Python机器学习与项目实践》XXX大学前导图前馈网络连接存在层与层之间,每层的节点之间是无连接的。(无循环)输入和输出的维数都是固定的,不能任意改变。无法处理变长的序列数据。前馈网络假设每次输入都是独立的,也就是说每次网络的输出只依赖于当前的输入。延时神经网络(TimeDelayNeuralNetwork,TDNN)建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)这样,前馈网络就具有了短期记忆的能力。如何给网络增加记忆能力?/publication/12314435_Neural_system_identification_model_of_human_sound_localization循环神经网络(RecurrentNeuralNetwork,RNN)循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据。循环神经网络比前馈神经网络更加符合生物神经网络的结构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上活性值状态6.2循环神经网络结构循环神经网络之所以被称为“循环”,是因为它们对序列中的每个元素执行相同的任务,输出取决于先前的计算结果。6.3长距离依赖与参数学习6.3.1长距离依赖长距离依赖是指当前系统的状态可能受到很长时间之前系统状态的影响,这是循环神经网络难以有效解决的问题之一。6.3长距离依赖与参数学习6.3.2参数学习循环神经网络的参数可以通过梯度下降法来进行学习。1.随时间反向传播算法2.实时循环学习算法6.4基于门控的循环神经网络主要介绍两种基于门控的循环神经网络:长短期记忆(LongShortTermMemory,LSTM)网络和门控循环单元(GatedRecurrentUnit,GRU)网络。6.4基于门控的循环神经网络6.4.1LSTM网络(1)引入记忆单元(MemoryCell):(2)使用门控机制(GateMechanism):长短期记忆神经网络(LongShort-TermMemory,LSTM)6.4基于门控的循环神经网络6.4.2GRU网络GRU网络是一种比LSTM网络更加简单的循环神经网络。GatedRecurrentUnit,GRU更新门重置门6.5深层循环神经网络可以将多层循环神经网络堆叠在一起,通过对几个简单层的组合,产生一个灵活的机制,特别是数据可能与不同层的堆叠有关。6.6实例:语言模型首先,加载周杰伦专辑歌词数据集。1.import
time
2.import
math
3.import
numpy
as
np
inport
torch
4.from
torch
import
nn,optim
5.import
torch.nn.functional
as
F
import
sys
6.sys.path.append(":")
7.import
d2izh
pytorch
as
d21
8.device=torch,device("code"if
torch.cuda.is_available()
else'cpu')
9.#加载周杰伦专辑歌词数据集10.(corpus_indices,char_to_idx,idx_to_char.
vocab
size)=
d21.load_data_jav_lyrics()
6.6.1定义模型下面构造一个含单个隐藏层、隐藏单元数为256个的循环神经网络层rnn_layer。1.num_hiddens=256
2.rnn_layer=nn.RNN(input_size-vocab_size,hidden_size=num_hiddens)
3.#rnn_layer=nn.LSTM(input_size=vocab_size,
hidden_size=num_hiddens)6.6.1定义模型下面构造一个含单个隐藏层、隐藏单元数为256个的循环神经网络层rnn_layer。循环神经网络(以LSTM网络为例)的输出6.6.1定义模型输出形状为(时间步数,批量大小,隐藏单元个数)1.num_steps=35
2.batch_size=2
3.state=None
4.x=torch.rand(num_steps,batch_size.
Vocab_size)
5.y,state_new=rn_layer(x,state)
6.print(Y.shape.
len(state_new).
state_nem[0].shape)
输出如下。
torch.size([35,2,256])1
torch.size([2,256])
6.6.1定义模型输出个数等于词典大小vocab_size。1.class
RNMModel(nn.Module):
2.def__init__.(self,rnn_layer,vocab_size):
3.super(RNNModel.
self).__init__()
4.self.rnn=rnn_laver
5.self.hidden_size=rnn_layer.hidden_size
*(2
If
rnn
layer.bidirectional
else
1)
6.selt.vocab
size=vocab
size
7.self.dense=nn.Linear(self_hidden_size.
Vocab_size)
8.self.state=None
9.def
formard(self.
inputs.
state):
10.
11.X=d21.to_onehot(inputs,self.vocab_size)
12.
Y,self.state
=self.rnn(torch.stack(x),state)
13.output=self.dense(Y.view(-1.Y.shape[-1]))
14.return
outout.
self.state
6.6.2训练模型下面定义一个预测函数。这里的实现在于前向计算和初始化隐藏状态的函数接口。1.def
predict_rnn_pytorch(prefix,num_chars,model,vocab_size,device,idx_to
_char.char_to_idx):
2.state=None
3.output=[char_to_idx[prefix[0]]]
4.for
t
in
range(num_chars+len(prefix)-1):
5.X=torch.tensor([output[-1]].device=device).view(1,1)
6.if
state
is
not
None:
7.if
isinstance(state,tuple):
8.state=(state[0].to(device),
state[1].to(device))
9.else:
10.state=state.to(device)
11.(Y,state)=model(x.
state)
12.if
t<len(prefix)-1:
13.output.append(char_to_idx[prefix[t
+1]])
14.else:
15.output.append(int(Y.argmax(din-1).item()))
16.return'
'.join([idx_to
char[i]
for
i
in
output])
6.6.2训练模型使用权重为随机值的模型来预测一次,代码如下。1.mode1=RNNModel(rnn_layer,vocab_size).to(device)
2.predict_rnn_pytorch('分开',10,model,vocab_size,device,idx_to_char,char_to_idx)
输出如下。"分开戏想迎凉想征凉征征"
6.6.2训练模型接下来实现训练函数。1.def
train_and_predict_rnn_pytorch(madel,num_hiddens,vocab_size,device,
2.
corpus_indices,idx_to_char,char_to_idx,
3.
num_epochs,num_steps,Ir,clipping_theta,
4.
batch_size,pred_period,pred_len,prefixes):
5.
loss=nn.crossEntropyLoss()
6.
optimizer=torch.optim.Adam(model.parameters(),Ir=1r)
7.
model.to(device)
state-None
8.
6.6.2训练模型9.
for
epoch
in
range(num
epochs):
10.
1_sum,n,start=0.0.0.time.time(
11.
data
iterd21.data
iter
consecutive(corpus
indices,batch
size,num
steps,device)
12.
for
x,Y
in
data_iter:
13.
if
state
is
not
None:
14.
if
isinstance(state,tuple):
15.
state=(state[0].detach(),state[1].detach())
16.
17.
else:
18.
state=state.detach()
19.
(output,state)=model(x,state)"output
20.
y=torch.transpose(Y.e,1).contiguous().view(-1)
21.
1=
loss(output,y.long())
22.
optimizer.zero_grad()
23.
1.backoward()
24.
d21.grad_clipping(model.parameters(),clipping_theta,device)
.
6.6.2训练模型25.
optimizer.step()
26.
1_sum
+=
1.item()*y.shape[0]
27.
n
+=
y.shape[0]
28.
try:
29.
perplexity=math.exp(1_sum/n)
30.
except
OverflowError:
31.
perplexity=float("inf")
32.
if
(epoch
+
1)
%
pred_period
==0:
33.
print("epoch
%d,perplexity
%f,time
%.2f
sec'%(
34.
epoch
+
1,perplexity,time.time()=
start))
35.
for
prefix
in
prefixes:
36.
print('-'.
predict_rnn_pytorch(
37.
prefix,pred_len,model,vocab_size,device,idx_to_char,char_to_idx))
6.6.2训练模型使用超参数来训练模型。1.num_epochs,batch_size,Ir,clipping_theta
=256,32,1e-3,1e-2
2.pred_period,pred_len,prefixes
=50,50,["
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专利权共有合同实施细则
- 个人借款合同版本其二
- 专业版设计公司培训合作合同样本
- 个人贷款业务合同书
- 事实婚姻离异合同参考范文
- 个人贷款合同抵押细则范本
- 个人借款居间合同范本
- 上海市公有房屋租赁合同书
- 九月股权转让合同书
- 上海汽车租赁合同模板
- 2024年山东省春季高考技能考试汽车专业试题 (多选题汇总)
- 循环系统练习试题(含答案)
- 新生儿黄疸早期识别课件
- 医药营销团队建设与管理
- 二年级数学上册口算题100道(全册完整)
- 四百字作文格子稿纸(可打印编辑)
- 冷轧工程专业词汇汇编注音版
- 小升初幼升小择校毕业升学儿童简历
- 第一单元(金融知识进课堂)课件
- 五年级语文阅读训练20篇专项训练带答案解析
- 介入导管室护士述职报告(5篇)
评论
0/150
提交评论