Python机器学习与项目实践- 课件 chap6-循环神经网络_第1页
Python机器学习与项目实践- 课件 chap6-循环神经网络_第2页
Python机器学习与项目实践- 课件 chap6-循环神经网络_第3页
Python机器学习与项目实践- 课件 chap6-循环神经网络_第4页
Python机器学习与项目实践- 课件 chap6-循环神经网络_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

循环神经网络《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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论