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