Pytorch 實戰RNN 正弦曲線的波形

2021-10-11 11:31:00 字數 3112 閱讀 7278

輸入資料(50,):

[ 1.          1.20408163  1.40816327  1.6122449   1.81632653  2.02040816

2.2244898 2.42857143 2.63265306 2.83673469 3.04081633 3.24489796

3.44897959 3.65306122 3.85714286 4.06122449 4.26530612 4.46938776

4.67346939 4.87755102 5.08163265 5.28571429 5.48979592 5.69387755

5.89795918 6.10204082 6.30612245 6.51020408 6.71428571 6.91836735

7.12244898 7.32653061 7.53061224 7.73469388 7.93877551 8.14285714

8.34693878 8.55102041 8.75510204 8.95918367 9.16326531 9.36734694

9.57142857 9.7755102 9.97959184 10.18367347 10.3877551 10.59183673

10.79591837 11. ]

input_size:定義輸入大小

hiddem_size:定義h0的大小

num_layers:定義rnn的層數

input輸入的維度:[seq len,batch,features]    torch.size([1, 49, 16])

ht的維度:[num layers,batch,h dim]       torch.size([1, 1, 16])

#定義引數

num_time_steps = 50

input_size = 1

hidden_size = 16

output_size = 1

lr = 0.01

hidden_prev = torch.zeros(1,1,hidden_size) #h0為隨機值

#定義rnn網路

class net(nn.module):

def __init__(self,):

super(net,self).__init__()

self.rnn = nn.rnn(

input_size = input_size, #輸入特徵數量為1

hidden_size = hidden_size, #隱藏層的特徵數量為16

num_layers = 1, #rnn的層數

batch_first = true, #true:輸入的tensor的shape為[seq_len,batch,input_size]

)for p in self.rnn.parameters(): #parameters:包含所有模型的迭代器.

nn.init.normal_(p,mean=0.0,std=0.001) #normal_:正態分佈

#連線層,對資料做處理 [49,16]→[49,1]

self.linear = nn.linear(hidden_size,output_size) #對輸入資料做線性變換y=ax+b:(輸入樣本大小,輸出樣本大小)為a,b是自帶的(估計).

#前向傳播函式

def forward(self,x,hidden_prev): #前向網路引數:輸入,h0

#[b,seq,h]

# print('--------------x--------------') #torch.size([1, 49, 1])

# print(x)

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

# print("----------hidden_prev(ht),out---------") #torch.size([1, 1, 16]) 輸出ht,torch.size([1, 49, 16]) x

# print(hidden_prev.shape)

# print(out)

#轉換資料 y(t):[1,49,16]→[1,49,1]

out = out.view(-1,hidden_size) #降維,view:返回相同資料的元素

# print("---------從其他維度推斷出來------") #1.torch.size([49, 16]),

# print(out.shape)

out = self.linear(out)

print("---------線性轉換---------") #1.torch.size([49, 1]),

print(out.shape)

out = out.unsqueeze(dim=0) #unsqueeze的in-place運算形式 tensor運算.

print("-------unsqueeze---------") #1.torch.size([1, 49, 1]),

print(out.shape)

return out,hidden_prev #[1, 49, 1],[1, 1, 16]

模型初始化

model = net()   #網路的例項

criterion = nn.mseloss() #均方誤差

optimizer = optim.adam(model.parameters(),lr) #網路引數加到優化器裡面

hidden_prev = torch.zeros(1,1,hidden_size) #h0為隨機值

訓練模型

output,hidden_prev = model(x,hidden_prev)  #x→output,h0→ht.  [1, 49, 1],[1, 1, 16]
效能評估

pytorch 實戰學習 二 RNN

1,pycharm 的設定 引數設定 執行.py檔案帶引數,例如argument 2,argparse.argumentparser 用法解析 3,torch.nn.utils nn utils 4,python資料視覺化庫 seaborn 5,1.檢視自己的虛擬環境 conda info envs...

讀PyTorch原始碼學習RNN

torch.nn.rnn,實現的是jeffrey elman在1990年提出的 recurrent neural network srnn 它還有乙個更為廣泛的稱呼 elman network。torch.nn.lstm,實現的是1997年的lstm torch.nn.gru,實現的是2014年的g...

RNN 《動手學深度學習pytorch》

rnn存在的問題 梯度較容易出現衰減或 bptt 改進 gru 控迴圈神經 絡 捕捉時間序列中時間步距離較 的依賴關係 長短期記憶long short term memory 遺忘門 控制上一時間步的記憶細胞 輸入門 控制當前時間步的輸入 輸出門 控制從記憶細胞到隱藏狀態 記憶細胞 種特殊的隱藏狀態...