迴圈神經網路 RNN

2021-10-02 03:17:18 字數 3156 閱讀 2691

from torchnlp.word_to_vector import glove

vectors=glove(

)vectors=

['hello'

]

torch.nn.utils.clip_grad_norm_(p,10)

#10就是最大梯度的模閾值,即保留原來梯度的方向,但梯度大小縮放至10

對與梯度瀰散現象,考慮使用lstm網路解決該問題

rnn=nn.rnn(

100,

10,1

)#100代表feature維度;10代表hidden層的維度;1表示空間層數

out,ht=forwar(x,h0)

#x是完整的序列,不是xt;ht:[layer,b,10];out:[feature,b,10]最後一層的資料

class

net(nn.module)

:def

__init__

(self,):

super

(net, self)

.__init__(

) self.rnn = nn.rnn(

input_size=input_size,

hidden_size=hidden_size,

num_layers=1,

batch_first=

true,)

for p in self.rnn.parameters():

nn.init.normal_(p, mean=

0.0, std=

0.001

) self.linear = nn.linear(hidden_size, output_size)

defforward

(self, x, hidden_prev)

: out, hidden_prev = self.rnn(x, hidden_prev)

# [b, seq, h]

out = out.view(-1

, hidden_size)

out = self.linear(out)

out = out.unsqueeze(dim=0)

return out, hidden_prev

model = net(

)criterion = nn.mseloss(

)optimizer = optim.adam(model.parameters(

), lr)

hidden_prev = torch.zeros(1,

1, hidden_size)

foriter

inrange

(6000):

start = np.random.randint(

3, size=1)

[0] time_steps = np.linspace(start, start +

10, num_time_steps)

data = np.sin(time_steps)

data = data.reshape(num_time_steps,1)

x = torch.tensor(data[:-

1]).

float()

.view(

1, num_time_steps -1,

1)y = torch.tensor(data[1:

]).float()

.view(

1, num_time_steps -1,

1)output, hidden_prev = model(x, hidden_prev)

hidden_prev = hidden_prev.detach(

) loss = criterion(output, y)

model.zero_grad(

) loss.backward(

) optimizer.step(

)

lstm=nn.lstm(input_size=

100,hidden_size=

20,num_layers=4)

x=torch.randn(10,

3,100)

# 輸入維度:100

out,

(h,c)

=lstm(x)

print

(out,shape,h.shape,c.shape)

#h的維度和c的維度是一樣的

#torch.size([10,3,20])

#torch.size([4,3,20])

#toch.size([4,3,20])

class

rnn(nn.moudle)

:def

__init__

(self,vocal_size,embedding_dim,hidden_dim)

:super

(rnn,self)

.__init__(

) slef.embedding=nn.embedding(vocab_size,embedding_dim)

self.rnn=nn.lstm(embedding_dim,hidden_dim,num_layers=2,

bidirectional=

true

,dropout=

0.5)

self.fc=nn.linear(hidden_dim*2,

1)self.dropout=nn.dropout(

0.5)

defforward

(self,x)

: embedding=self.dropout(self.embedding(x)

) output,

(hidden,cell)

=self.rnn(embedding)

hidden=torch.cat(hidden[-2

],hidden[-1

],dim=1)

hidden=self.dropout(hidden)

out=self.fc(hidden)

return out

RNN迴圈神經網路

評測乙個句子出現的可能性 文字自動生成 rnn迴圈處理相同的任務,就是 句子接下來的單詞是什麼。rnn迴圈記錄前面所有文字的資訊 也叫做記憶 作為 當前詞的乙個輸入 1.語言模型和文字生成 語言模型中,輸入是經過編碼的詞向量序列,輸出是一系列 的詞 2.機器翻譯 機器翻譯必須等待所有輸入結束後才能輸...

RNN迴圈神經網路

神經網路基礎 神經網路可以當做是擬合任意函式的黑盒子,給定特定的輸入x,就能夠的得到希望的輸出y。神經網路結構如下圖 將神經網路模型訓練好之後,輸入層輸入乙個x,通過網路之後就能夠在輸出層輸出特定的y.有了這麼強大的模型,為什麼會出現rnn 迴圈神經網 它們單獨的乙個個的輸入,前乙個輸入和後乙個輸入...

迴圈神經網路RNN

rnn主要用來處理序列資料,在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,每層內的節點之間無連線,迴圈神經網路中乙個當前神經元的輸出與前面的輸出也有關,網路會對前面的資訊進行記憶並應用於當前神經元的計算中,隱藏層之間的節點是有連線的,並且隱藏層的輸入不僅包含輸入層的輸出還包含上一時刻隱藏層的...