Python機(jī)器學(xué)習(xí)與項(xiàng)目實(shí)踐- 課件 chap6-循環(huán)神經(jīng)網(wǎng)絡(luò)_第1頁(yè)
Python機(jī)器學(xué)習(xí)與項(xiàng)目實(shí)踐- 課件 chap6-循環(huán)神經(jīng)網(wǎng)絡(luò)_第2頁(yè)
Python機(jī)器學(xué)習(xí)與項(xiàng)目實(shí)踐- 課件 chap6-循環(huán)神經(jīng)網(wǎng)絡(luò)_第3頁(yè)
Python機(jī)器學(xué)習(xí)與項(xiàng)目實(shí)踐- 課件 chap6-循環(huán)神經(jīng)網(wǎng)絡(luò)_第4頁(yè)
Python機(jī)器學(xué)習(xí)與項(xiàng)目實(shí)踐- 課件 chap6-循環(huán)神經(jīng)網(wǎng)絡(luò)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

循環(huán)神經(jīng)網(wǎng)絡(luò)《Python機(jī)器學(xué)習(xí)與項(xiàng)目實(shí)踐》XXX大學(xué)前導(dǎo)圖前饋網(wǎng)絡(luò)連接存在層與層之間,每層的節(jié)點(diǎn)之間是無(wú)連接的。(無(wú)循環(huán))輸入和輸出的維數(shù)都是固定的,不能任意改變。無(wú)法處理變長(zhǎng)的序列數(shù)據(jù)。前饋網(wǎng)絡(luò)假設(shè)每次輸入都是獨(dú)立的,也就是說(shuō)每次網(wǎng)絡(luò)的輸出只依賴于當(dāng)前的輸入。延時(shí)神經(jīng)網(wǎng)絡(luò)(TimeDelayNeuralNetwork,TDNN)建立一個(gè)額外的延時(shí)單元,用來(lái)存儲(chǔ)網(wǎng)絡(luò)的歷史信息(可以包括輸入、輸出、隱狀態(tài)等)這樣,前饋網(wǎng)絡(luò)就具有了短期記憶的能力。如何給網(wǎng)絡(luò)增加記憶能力?/publication/12314435_Neural_system_identification_model_of_human_sound_localization循環(huán)神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetwork,RNN)循環(huán)神經(jīng)網(wǎng)絡(luò)通過(guò)使用帶自反饋的神經(jīng)元,能夠處理任意長(zhǎng)度的時(shí)序數(shù)據(jù)。循環(huán)神經(jīng)網(wǎng)絡(luò)比前饋神經(jīng)網(wǎng)絡(luò)更加符合生物神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。循環(huán)神經(jīng)網(wǎng)絡(luò)已經(jīng)被廣泛應(yīng)用在語(yǔ)音識(shí)別、語(yǔ)言模型以及自然語(yǔ)言生成等任務(wù)上活性值狀態(tài)6.2循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)循環(huán)神經(jīng)網(wǎng)絡(luò)之所以被稱為“循環(huán)”,是因?yàn)樗鼈儗?duì)序列中的每個(gè)元素執(zhí)行相同的任務(wù),輸出取決于先前的計(jì)算結(jié)果。6.3長(zhǎng)距離依賴與參數(shù)學(xué)習(xí)6.3.1長(zhǎng)距離依賴長(zhǎng)距離依賴是指當(dāng)前系統(tǒng)的狀態(tài)可能受到很長(zhǎng)時(shí)間之前系統(tǒng)狀態(tài)的影響,這是循環(huán)神經(jīng)網(wǎng)絡(luò)難以有效解決的問(wèn)題之一。6.3長(zhǎng)距離依賴與參數(shù)學(xué)習(xí)6.3.2參數(shù)學(xué)習(xí)循環(huán)神經(jīng)網(wǎng)絡(luò)的參數(shù)可以通過(guò)梯度下降法來(lái)進(jìn)行學(xué)習(xí)。1.隨時(shí)間反向傳播算法2.實(shí)時(shí)循環(huán)學(xué)習(xí)算法6.4基于門(mén)控的循環(huán)神經(jīng)網(wǎng)絡(luò)主要介紹兩種基于門(mén)控的循環(huán)神經(jīng)網(wǎng)絡(luò):長(zhǎng)短期記憶(LongShortTermMemory,LSTM)網(wǎng)絡(luò)和門(mén)控循環(huán)單元(GatedRecurrentUnit,GRU)網(wǎng)絡(luò)。6.4基于門(mén)控的循環(huán)神經(jīng)網(wǎng)絡(luò)6.4.1LSTM網(wǎng)絡(luò)(1)引入記憶單元(MemoryCell):(2)使用門(mén)控機(jī)制(GateMechanism):長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)(LongShort-TermMemory,LSTM)6.4基于門(mén)控的循環(huán)神經(jīng)網(wǎng)絡(luò)6.4.2GRU網(wǎng)絡(luò)GRU網(wǎng)絡(luò)是一種比LSTM網(wǎng)絡(luò)更加簡(jiǎn)單的循環(huán)神經(jīng)網(wǎng)絡(luò)。GatedRecurrentUnit,GRU更新門(mén)重置門(mén)6.5深層循環(huán)神經(jīng)網(wǎng)絡(luò)可以將多層循環(huán)神經(jīng)網(wǎng)絡(luò)堆疊在一起,通過(guò)對(duì)幾個(gè)簡(jiǎn)單層的組合,產(chǎn)生一個(gè)靈活的機(jī)制,特別是數(shù)據(jù)可能與不同層的堆疊有關(guān)。6.6實(shí)例:語(yǔ)言模型首先,加載周杰倫專輯歌詞數(shù)據(jù)集。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.#加載周杰倫專輯歌詞數(shù)據(jù)集10.(corpus_indices,char_to_idx,idx_to_char.

vocab

size)=

d21.load_data_jav_lyrics()

6.6.1定義模型下面構(gòu)造一個(gè)含單個(gè)隱藏層、隱藏單元數(shù)為256個(gè)的循環(huán)神經(jīng)網(wǎng)絡(luò)層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定義模型下面構(gòu)造一個(gè)含單個(gè)隱藏層、隱藏單元數(shù)為256個(gè)的循環(huán)神經(jīng)網(wǎng)絡(luò)層rnn_layer。循環(huán)神經(jīng)網(wǎng)絡(luò)(以LSTM網(wǎng)絡(luò)為例)的輸出6.6.1定義模型輸出形狀為(時(shí)間步數(shù),批量大小,隱藏單元個(gè)數(shù))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定義模型輸出個(gè)數(shù)等于詞典大小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訓(xùn)練模型下面定義一個(gè)預(yù)測(cè)函數(shù)。這里的實(shí)現(xiàn)在于前向計(jì)算和初始化隱藏狀態(tài)的函數(shù)接口。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訓(xùn)練模型使用權(quán)重為隨機(jī)值的模型來(lái)預(yù)測(cè)一次,代碼如下。1.mode1=RNNModel(rnn_layer,vocab_size).to(device)

2.predict_rnn_pytorch('分開(kāi)',10,model,vocab_size,device,idx_to_char,char_to_idx)

輸出如下。"分開(kāi)戲想迎涼想征涼征征"

6.6.2訓(xùn)練模型接下來(lái)實(shí)現(xiàn)訓(xùn)練函數(shù)。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訓(xùn)練模型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訓(xùn)練模型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訓(xùn)練模型使用超參數(shù)來(lái)訓(xùn)練模型。1.num_epochs,batch_size,Ir,clipping_theta

=256,32,1e-3,1e-2

2.pred_period,pred_len,prefixes

=50,50,["

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論