日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用pytorch实现简易RNN

發(fā)布時間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用pytorch实现简易RNN 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 導入庫函數(shù)

import torch import numpy as np import matplotlib.pyplot as plt

2 設(shè)置超參數(shù)

TIME_STEP=10 INPUT_SIZE=1 HIDDEN_SIZE=32 LR=0.02

3? 定義RNN?

class RNN(torch.nn.Module):def __init__(self):super(RNN,self).__init__()self.rnn=torch.nn.RNN(input_size=INPUT_SIZE,hidden_size=HIDDEN_SIZE,num_layers=1,batch_first=True) #設(shè)置batch_first為True,那么輸入數(shù)據(jù)的維度為(batch_size,time_step,input_size) #如果不設(shè)置這個值,或者設(shè)置為False,那么輸入數(shù)據(jù)的維度為(time_step,batch_size,input_size)self.out=torch.nn.Linear(HIDDEN_SIZE,1)#將隱藏層輸出轉(zhuǎn)化為需要的輸出def forward(self,x,h_state):#因為在RNN中,下一個時間片隱藏層狀態(tài)的計算需要上一個時間片的隱藏層狀態(tài),所以我們要一直傳遞這個h_state#x (batch_size,time_step,INPUT_SIZE)r_out,h_state=self.rnn(x,h_state)#h_state也要作為RNN的一個輸入和一個輸出#r_out:(batch_size,time_step,HIDDEN_SIZE)#h_state:(batch_size,time_step,HIDDEN_SIZE)outs=[]for time_step in range(r_out.size()[1]):outs.append(self.out(r_out[:,time_step,:]))#每一個要被self.out運算的元素[batch_size,1,HIDDEN_SIZE]#每個計算完,被append到outs的元素[batch_size,1,1]return torch.stack(outs,dim=1),h_state#返回的第一個元素[batch_size,time_step,1]#torch.stack函數(shù)的維度和axis不一樣,dim=1的意思是在第一個維度處疊加rnn=RNN() print(rnn) ''' RNN((rnn): RNN(1, 32, batch_first=True)(out): Linear(in_features=32, out_features=1, bias=True) ) '''

或者foward函數(shù)也可以這么寫:

class RNN(torch.nn.Module):def __init__(self):super(RNN,self).__init__()self.rnn=torch.nn.RNN(input_size=INPUT_SIZE,hidden_size=HIDDEN_SIZE,num_layers=1,batch_first=True) #設(shè)置batch_first為True,那么輸入數(shù)據(jù)的維度為(batch,time_step,input_size) #如果不設(shè)置這個值,或者設(shè)置為False,那么輸入數(shù)據(jù)的維度為(time_step,batch,input_size)self.out=torch.nn.Linear(HIDDEN_SIZE,1)def forward(self,x,h_state):r_out,h_state=self.rnn(x,h_state)#在此之前的部分不動r_out=r_out.view(-1,HIDDEN_SIZE)out=self.out(r_out)out=out.view(-1,TIME_STEP,1)return(out,h_state)rnn=RNN() print(rnn)

4 設(shè)置優(yōu)化器和損失函數(shù)

optimizer=torch.optim.Adam(rnn.parameters(),lr=LR) loss_func=torch.nn.MSELoss()

5 訓練RNN

我們這里希望用sin函數(shù)預測cos函數(shù)

h_state=Nonefor step in range(100):start=step*np.piend=(step+1)*np.pisteps=np.linspace(start,end,TIME_STEP,dtype=np.float32)#這里dtype這一部分一定要加,不然的話會報錯,RuntimeError: expected scalar type Double but found Floatx_np=np.sin(steps).reshape(1,TIME_STEP,INPUT_SIZE)y_np=np.cos(steps).reshape(1,TIME_STEP,1)#目標:用sin預測cosx=torch.from_numpy(x_np)y=torch.from_numpy(y_np)prediction,h_state=rnn(x,h_state)#每一組input,都對應了一個h_state和一個predictionh_state=h_state.data#將對應的h_state向后傳loss=loss_func(prediction,y)optimizer.zero_grad()#清空上一步的參與更新參數(shù)值loss.backward()#誤差反向傳播,計算參數(shù)更新值optimizer.step()#將參數(shù)更新值施加到rnn的parameters上if(step % 10==0):plt.plot(steps,prediction.data.numpy().flatten(),'g*')plt.plot(steps,y_np.flatten(),'r-')plt.show()

6 實驗結(jié)果

一開始

最終

7 整體函數(shù)

import torch import numpy as np import matplotlib.pyplot as pltTIME_STEP=10 INPUT_SIZE=1 HIDDEN_SIZE=32 LR=0.02class RNN(torch.nn.Module):def __init__(self):super(RNN,self).__init__()self.rnn=torch.nn.RNN(input_size=INPUT_SIZE,hidden_size=HIDDEN_SIZE,num_layers=1,batch_first=True) #設(shè)置batch_first為True,那么輸入數(shù)據(jù)的維度為(batch_size,time_step,input_size) #如果不設(shè)置這個值,或者設(shè)置為False,那么輸入數(shù)據(jù)的維度為(time_step,batch_size,input_size)self.out=torch.nn.Linear(HIDDEN_SIZE,1)#將隱藏層輸出轉(zhuǎn)化為需要的輸出def forward(self,x,h_state):#因為在RNN中,下一個時間片隱藏層狀態(tài)的計算需要上一個時間片的隱藏層狀態(tài),所以我們要一直傳遞這個h_state#x (batch_size,time_step,INPUT_SIZE)r_out,h_state=self.rnn(x,h_state)#h_state也要作為RNN的一個輸入和一個輸出#r_out:(batch_size,time_step,HIDDEN_SIZE)#h_state:(batch_size,time_step,HIDDEN_SIZE)outs=[]for time_step in range(r_out.size()[1]):outs.append(self.out(r_out[:,time_step,:]))#每一個要被self.out運算的元素[batch_size,1,HIDDEN_SIZE]#每個計算完,被append到outs的元素[batch_size,1,1]return torch.stack(outs,dim=1),h_state#返回的第一個元素[batch_size,time_step,1]#torch.stack函數(shù)的維度和axis不一樣,dim=1的意思是在第一個維度處疊加rnn=RNN() print(rnn) ''' RNN((rnn): RNN(1, 32, batch_first=True)(out): Linear(in_features=32, out_features=1, bias=True) ) '''optimizer=torch.optim.Adam(rnn.parameters(),lr=LR) loss_func=torch.nn.MSELoss()h_state=Nonefor step in range(100):start=step*np.piend=(step+1)*np.pisteps=np.linspace(start,end,TIME_STEP,dtype=np.float32)#這里dtype這一部分一定要加,不然的話會報錯,RuntimeError: expected scalar type Double but found Floatx_np=np.sin(steps).reshape(1,TIME_STEP,INPUT_SIZE)y_np=np.cos(steps).reshape(1,TIME_STEP,1)#目標:用sin預測cosx=torch.from_numpy(x_np)y=torch.from_numpy(y_np)prediction,h_state=rnn(x,h_state)#每一組input,都對應了一個h_state和一個predictionh_state=h_state.data#將對應的h_state向后傳loss=loss_func(prediction,y)optimizer.zero_grad()#清空上一步的參與更新參數(shù)值loss.backward()#誤差反向傳播,計算參數(shù)更新值optimizer.step()#將參數(shù)更新值施加到rnn的parameters上if(step % 10==0):plt.plot(steps,prediction.data.numpy().flatten(),'g*')plt.plot(steps,y_np.flatten(),'r-')plt.show()

?

總結(jié)

以上是生活随笔為你收集整理的用pytorch实现简易RNN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品国产成人久久av盗摄 | 欧美性猛交乱大交 | 日本一二三区在线 | 国产伦精品一区二区三区免费 | 龚玥菲一级淫片 | 光棍福利视频 | 聚色av| 国产字幕av | 都市激情 自拍偷拍 | 国产xxxx裸体xxx免费 | 97涩涩网| 91n视频| 色欲狠狠躁天天躁无码中文字幕 | 国产后入又长又硬 | 91九色国产在线 | 插插操操 | 亚洲性生活视频 | 肉丝超薄少妇一区二区三区 | 成人午夜视频在线 | 欧洲精品二区 | 日本黄色小说 | 精品人人妻人人澡人人爽牛牛 | www.青青草.com | 黄色片网站免费在线观看 | 国产中文字幕免费 | 国产簧片 | 天天干狠狠爱 | 国产又粗又猛又爽又黄的视频小说 | 嘿咻视频在线观看 | 日本xxxxwwwww | 在线观看亚洲国产 | 午夜成年人 | 精品视频一区二区三区 | 男人av在线 | 波多野结衣一区二区三区高清av | 91禁在线动漫 | 啪免费视频| 孕妇爱爱视频 | 久久久婷婷 | 成人精品一区二区三区电影黑人 | 香蕉茄子视频 | 69精品无码成人久久久久久 | 麻豆影视在线 | 日韩一级免费观看 | 久久久久无码国产精品一区 | 国产偷v国产偷v亚洲高清 | 亚洲最新 | 18岁成年人网站 | 久操热线| 男女免费看 | 亚洲色图21p| 成人午夜视频免费在线观看 | 午夜激情视频网 | 麻豆污视频 | 一本到高清 | 伊人快播 | 久久久久91 | 神马一区二区三区 | 中文字母av | 三八激情网| 亚洲最大av| 一区精品视频在线观看 | 黄色美女免费网站 | 久久精品视频网站 | 亚洲区一区二区三区 | 国产日韩欧美成人 | 亚洲人人爽 | 午夜一二区| 国产在线观看一区二区三区 | 日韩爽爽视频 | www.av天天 | 中文字幕11页中文字幕11页 | 国产色无码精品视频 | 国产一区一一区高清不卡 | 日本在线色 | 精品视频一区二区在线观看 | 亚洲成人av在线播放 | 日本男男激情gay办公室 | 亚洲一区二区三区四 | 中国肥胖女人真人毛片 | 美女网站免费观看 | 成人午夜福利视频 | 国产黄色片免费看 | 亚洲一区二区三区在线看 | 操天天 | 日本亚洲欧洲色 | 琪琪午夜伦理影院7777 | av大片在线免费观看 | 婷婷综合激情 | 无码成人精品区一级毛片 | 亚洲视频在线观看 | 国产sm网站 | 91视频免费看片 | 好吊视频一区 | 精品国产一级片 | av免费天堂 | 熟女高潮一区二区三区 | 韩漫动漫免费大全在线观看 | 欧洲激情网 |