国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【PyTorch API】 nn.RNN 和 nn.LSTM 介紹和代碼詳解

這篇具有很好參考價(jià)值的文章主要介紹了【PyTorch API】 nn.RNN 和 nn.LSTM 介紹和代碼詳解。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. nn.RNN 構(gòu)建單向 RNN

torch.nn.RNN 的 PyTorch 鏈接:torch.nn.RNN(*args, **kwargs)

nn.RNN 的用法和輸入輸出參數(shù)的介紹直接看代碼:

import torch
import torch.nn as nn

# 單層單向 RNN
embed_dim = 5    # 每個(gè)輸入元素的特征維度,如每個(gè)單詞用長度為 5 的特征向量表示
hidden_dim = 6   # 隱狀態(tài)的特征維度,如每個(gè)單詞在隱藏層中用長度為 6 的特征向量表示
rnn_layers = 4   # 循環(huán)層數(shù)
rnn = nn.RNN(input_size=embed_dim, hidden_size=hidden_dim, num_layers=rnn_layers, batch_first=True)

# 輸入
batch_size = 2
sequence_length = 3    # 輸入的序列長度,如 i love you 的序列長度為 3,每個(gè)單詞用長度為 feature_num 的特征向量表示
input = torch.randn(batch_size, sequence_length, embed_dim)
h0 = torch.randn(rnn_layers, batch_size, hidden_dim)

# output 表示隱藏層在各個(gè) time step 上計(jì)算并輸出的隱狀態(tài)
# hn 表示所有掩藏層的在最后一個(gè) time step 隱狀態(tài), 即單詞 you 的隱狀態(tài)
output, hn = rnn(input, h0)

print(f"output = {output}")
print(f"hn = {hn}")
print(f"output.shape = {output.shape}")     # torch.Size([2, 3, 6])    [batch_size, sequence_length, hidden_dim]
print(f"hn.shape = {hn.shape}")             # torch.Size([4, 2, 6])    [rnn_layers, batch_size, hidden_dim]


"""
output = tensor([[[-0.3727, -0.2137, -0.3619, -0.6116, -0.1483,  0.8292],
         [ 0.1138, -0.6310, -0.3897, -0.5275,  0.2012,  0.3399],
         [-0.0522, -0.5991, -0.3114, -0.7089,  0.3824,  0.1903]],

        [[ 0.1370, -0.6037,  0.3906, -0.5222,  0.8498,  0.8887],
         [-0.3463, -0.3293, -0.1874, -0.7746,  0.2287,  0.1343],
         [-0.2588, -0.4145, -0.2608, -0.3799,  0.4464,  0.1960]]],
       grad_fn=<TransposeBackward1>)
       
hn = tensor([[[-0.2892,  0.7568,  0.4635, -0.2106, -0.0123, -0.7278],
         [ 0.3492, -0.3639, -0.4249, -0.6626,  0.7551,  0.9312]],

        [[ 0.0154,  0.0190,  0.3580, -0.1975, -0.1185,  0.3622],
         [ 0.0905,  0.6483, -0.1252,  0.3903,  0.0359, -0.3011]],

        [[-0.2833, -0.3383,  0.2421, -0.2168, -0.6694, -0.5462],
         [ 0.2976,  0.0724, -0.0116, -0.1295, -0.6324, -0.0302]],

        [[-0.0522, -0.5991, -0.3114, -0.7089,  0.3824,  0.1903],
         [-0.2588, -0.4145, -0.2608, -0.3799,  0.4464,  0.1960]]],
       grad_fn=<StackBackward0>)

output.shape = torch.Size([2, 3, 6])
hn.shape = torch.Size([4, 2, 6])
"""

需要特別注意的是 nn.RNN 的第二個(gè)輸出 hn 表示所有掩藏層的在最后一個(gè) time step 隱狀態(tài),聽起來很難理解,看下面的紅色方框內(nèi)的數(shù)據(jù)就懂了。即 output[:, -1, :] = hn[-1, : , :]

這里 hn 保存了四次循環(huán)中最后一個(gè) time step 隱狀態(tài)的數(shù)值,以輸入 i love you 為了,hn 保存的是單詞 you 的隱狀態(tài)。

【PyTorch API】 nn.RNN 和 nn.LSTM 介紹和代碼詳解,# PyTorch算子/函數(shù)用法,rnn,lstm,pytorch,深度學(xué)習(xí)

2. nn.LSTM 構(gòu)建單向 LSTM

torch.nn.RNN 的 PyTorch 鏈接:torch.nn.LSTM(*args, **kwargs)

nn.LSTM 的用法和輸入輸出參數(shù)的介紹直接看代碼:

import torch
import torch.nn as nn


batch_size = 4
seq_len = 3      # 輸入的序列長度
embed_dim = 5    # 每個(gè)輸入元素的特征維度
hidden_size = 5 * 2    # 隱狀態(tài)的特征維度,根據(jù)工程經(jīng)驗(yàn)可取 hidden_size = embed_dim * 2
num_layers = 2    # LSTM 的層數(shù),一般設(shè)置為 1-4 層;多層 LSTM 的介紹可以參考 https://blog.csdn.net/weixin_41041772/article/details/88032093

lstm = nn.LSTM(input_size=embed_dim, hidden_size=hidden_size, num_layers=num_layers, batch_first=True)

# h0 可以缺省
input = torch.randn(batch_size, seq_len, embed_dim)

"""
output 表示隱藏層在各個(gè) time step 上計(jì)算并輸出的隱狀態(tài)
hn 表示所有隱藏層的在最后一個(gè) time step 隱狀態(tài), 即單詞 you 的隱狀態(tài);所以 hn 與句子長度 seq_len 無關(guān)
hn[-1] 表示最后一個(gè)隱藏層的在最后一個(gè) time step 隱狀態(tài),即 LSTM 的輸出
cn 表示句子的最后一個(gè)單詞的細(xì)胞狀態(tài);所以 cn 與句子長度 seq_len 無關(guān)
其中 output[:, -1, :] = hn[-1,:,:]
"""
output, (hn, cn) = lstm(input)


print(f"output.shape = {output.shape}")   # torch.Size([4, 3, 10])
print(f"hn.shape = {hn.shape}")           # torch.Size([2, 4, 10])
print(f"cn.shape = {cn.shape}")           # torch.Size([2, 4, 10])

print(f"output = {output}")
print(f"hn = {hn}")
print(f"output[:, -1, :] = {output[:, -1, :]}")
print(f"hn[-1,:,:] = {hn[-1,:,:]}")


"""
output = tensor([[[ 0.0447,  0.0111,  0.0292,  0.0692, -0.0547, -0.0120, -0.0202, -0.0243,  0.1216,  0.0643],
                  [ 0.0780,  0.0279,  0.0231,  0.1061, -0.0819, -0.0027, -0.0269, -0.0509,  0.1800,  0.0921],
                  [ 0.0993,  0.0160,  0.0516,  0.1402, -0.1146, -0.0177, -0.0607, -0.0715,  0.2110,  0.0954]],

                 [[ 0.0542, -0.0053,  0.0415,  0.0899, -0.0561, -0.0376, -0.0327, -0.0276,  0.1159,  0.0545],
                  [ 0.0819, -0.0015,  0.0640,  0.1263, -0.1021, -0.0502, -0.0495, -0.0464,  0.1814,  0.0750],
                  [ 0.0914,  0.0034,  0.0558,  0.1418, -0.1327, -0.0643, -0.0616, -0.0674,  0.2195,  0.0886]],

                 [[ 0.0552, -0.0006,  0.0351,  0.0864, -0.0486, -0.0192, -0.0305, -0.0289,  0.1103,  0.0554],
                  [ 0.0835, -0.0099,  0.0415,  0.1396, -0.0758, -0.0829, -0.0616, -0.0604,  0.1740,  0.0828],
                  [ 0.1202, -0.0113,  0.0570,  0.1608, -0.0836, -0.0801, -0.0792, -0.0874,  0.1923,  0.0829]],

                 [[ 0.0115, -0.0026,  0.0267,  0.0747, -0.0867, -0.0250, -0.0199, -0.0154,  0.1158,  0.0649],
                  [ 0.0628,  0.0003,  0.0297,  0.1191, -0.1028, -0.0342, -0.0509, -0.0496,  0.1759,  0.0831],
                  [ 0.0569,  0.0105,  0.0158,  0.1300, -0.1367, -0.0207, -0.0514, -0.0629,  0.2029,  0.1042]]], grad_fn=<TransposeBackward0>)
            
hn = tensor([[[-0.1933, -0.0058, -0.1237,  0.0348, -0.1394,  0.2403,  0.1591, -0.1143,  0.1211, -0.1971],
              [-0.2387,  0.0433, -0.0296,  0.0877, -0.1198,  0.1919,  0.0832, 0.0738,  0.1907, -0.1807],
              [-0.2174,  0.0721, -0.0447,  0.1081, -0.0520,  0.2519,  0.4040, -0.0033,  0.1378, -0.2930],
              [-0.2130, -0.0404, -0.0588, -0.1346, -0.1865,  0.1032, -0.0269, 0.0265, -0.0664, -0.1800]],

             [[ 0.0993,  0.0160,  0.0516,  0.1402, -0.1146, -0.0177, -0.0607, -0.0715,  0.2110,  0.0954],
              [ 0.0914,  0.0034,  0.0558,  0.1418, -0.1327, -0.0643, -0.0616, -0.0674,  0.2195,  0.0886],
              [ 0.1202, -0.0113,  0.0570,  0.1608, -0.0836, -0.0801, -0.0792, -0.0874,  0.1923,  0.0829],
              [ 0.0569,  0.0105,  0.0158,  0.1300, -0.1367, -0.0207, -0.0514, -0.0629,  0.2029,  0.1042]]], grad_fn=<StackBackward0>)


驗(yàn)證 output[:, -1, :] = hn[-1,:,:]
output[:, -1, :] = tensor([[ 0.0993,  0.0160,  0.0516,  0.1402, -0.1146, -0.0177, -0.0607, -0.0715,0.2110,  0.0954],
                           [ 0.0914,  0.0034,  0.0558,  0.1418, -0.1327, -0.0643, -0.0616, -0.0674,  0.2195,  0.0886],
                           [ 0.1202, -0.0113,  0.0570,  0.1608, -0.0836, -0.0801, -0.0792, -0.0874, 0.1923,  0.0829],
                           [ 0.0569,  0.0105,  0.0158,  0.1300, -0.1367, -0.0207, -0.0514, -0.0629, 0.2029,  0.1042]], grad_fn=<SliceBackward0>)
          
hn[-1,:,:] = tensor([[ 0.0993,  0.0160,  0.0516,  0.1402, -0.1146, -0.0177, -0.0607, -0.0715,0.2110,  0.0954],
                     [ 0.0914,  0.0034,  0.0558,  0.1418, -0.1327, -0.0643, -0.0616, -0.0674,  0.2195,  0.0886],
                     [ 0.1202, -0.0113,  0.0570,  0.1608, -0.0836, -0.0801, -0.0792, -0.0874,  0.1923,  0.0829],
                     [ 0.0569,  0.0105,  0.0158,  0.1300, -0.1367, -0.0207, -0.0514, -0.0629, 0.2029,  0.1042]], grad_fn=<SliceBackward0>)
"""

3. 推薦參考資料

多層 LSTM 的介紹可以參考博客 RNN之多層LSTM理解:輸入,輸出,時(shí)間步,隱藏節(jié)點(diǎn)數(shù),層數(shù)

RNN 的原理和 PyTorch 源碼復(fù)現(xiàn)可以參考視頻 PyTorch RNN的原理及其手寫復(fù)現(xiàn)

LSTM 的原理和 PyTorch 源碼復(fù)現(xiàn)可以參考視頻 PyTorch LSTM和LSTMP的原理及其手寫復(fù)現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-530187.html

到了這里,關(guān)于【PyTorch API】 nn.RNN 和 nn.LSTM 介紹和代碼詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Pytorch 對比TensorFlow 學(xué)習(xí):Day 17-18: 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和LSTM

    Day 17-18: 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和LSTM 在這兩天的學(xué)習(xí)中,我專注于理解循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和長短期記憶網(wǎng)絡(luò)(LSTM)的基本概念,并學(xué)習(xí)了它們在處理序列數(shù)據(jù)時(shí)的應(yīng)用。 1.RNN和LSTM基礎(chǔ): RNN:了解了RNN是如何處理序列數(shù)據(jù)的,特別是它的循環(huán)結(jié)構(gòu)可以用于處理時(shí)間序列或連續(xù)

    2024年01月20日
    瀏覽(20)
  • RNN+LSTM正弦sin信號(hào)預(yù)測 完整代碼數(shù)據(jù)視頻教程

    RNN+LSTM正弦sin信號(hào)預(yù)測 完整代碼數(shù)據(jù)視頻教程

    視頻講解:RNN+LSTM正弦sin信號(hào)預(yù)測_嗶哩嗶哩_bilibili 效果演示: ?數(shù)據(jù)展示: 完整代碼:?

    2024年02月12日
    瀏覽(15)
  • 一步一步詳解LSTM網(wǎng)絡(luò)【從RNN到LSTM到GRU等,直至attention】

    一步一步詳解LSTM網(wǎng)絡(luò)【從RNN到LSTM到GRU等,直至attention】

    本文主要譯至Understanding LSTM Networks并加上了部分筆者的見解,對于全面理解LSTM有一定的幫助。 人類不會(huì)每一秒都從頭開始思考。 當(dāng)你閱讀這篇文章時(shí),你會(huì)根據(jù)你對前面單詞的理解來理解每個(gè)單詞。 你不會(huì)扔掉所有東西,重新開始思考。 你的思想有堅(jiān)持。Your thoughts have

    2024年02月05日
    瀏覽(19)
  • Python深度學(xué)習(xí)026:基于Pytorch的典型循環(huán)神經(jīng)網(wǎng)絡(luò)模型RNN、LSTM、GRU的公式及簡潔案例實(shí)現(xiàn)(官方)

    循環(huán)神經(jīng)網(wǎng)絡(luò)(也有翻譯為遞歸神經(jīng)網(wǎng)絡(luò))最典型的三種網(wǎng)絡(luò)結(jié)構(gòu)是: RNN(Recurrent Neural Network,循環(huán)神經(jīng)網(wǎng)絡(luò)) LSTM(Long Short-Term Memory,長短期記憶網(wǎng)絡(luò)) GRU(Gate Recurrent Unit,門控循環(huán)單元) 理解參數(shù)的含義非常重要,否則,你不知道準(zhǔn)備什么維度的輸入數(shù)據(jù)送入模型 先

    2023年04月22日
    瀏覽(25)
  • 深度學(xué)習(xí)RNN,GRU,LSTM文本生成解碼器的訓(xùn)練損失講解(附代碼)

    以下以GRU為例講解RNN作為解碼器時(shí)如何根據(jù)用戶、商品特征信息 hidden 生成評價(jià)。 解碼器部分代碼如下: 在訓(xùn)練時(shí),解碼器會(huì)有兩個(gè)輸入:一是編碼器提取的用戶、商品特征,二是用戶對商品的評價(jià)。 評價(jià)是文字,在訓(xùn)練開始前已經(jīng)轉(zhuǎn)換成了Token ID, 比如 I love this item , 每個(gè)

    2024年04月12日
    瀏覽(16)
  • 【Torch API】pytorch 中bincount()函數(shù)詳解

    torch.bincount 是 PyTorch 中的函數(shù),用于計(jì)算給定整數(shù)張量中每個(gè)值的出現(xiàn)次數(shù)。它返回一個(gè)張量,其中的每個(gè)元素表示輸入張量中對應(yīng)索引值出現(xiàn)的次數(shù)。 具體而言, torch.bincount 函數(shù)的語法如下: 其中: input 是輸入的整數(shù)張量,可以是一維或多維的。 weights 是可選的權(quán)重張量

    2024年02月11日
    瀏覽(71)
  • pytorch容器之nn.Sequential, nn.ModuleList, nn.ModuleDict介紹

    ??在深度學(xué)習(xí)模型創(chuàng)建的時(shí)候,我們經(jīng)常會(huì)碰到 nn.Sequential , nn.ModuleList , nn.ModuleDict 這三個(gè)東西,尤其是在遷移學(xué)習(xí)訓(xùn)練的時(shí)候經(jīng)常碰到,他們到底是什么,怎么用的,使用的時(shí)候有哪些注意事項(xiàng),通過這篇博文淺記一下。 ??在介紹這三個(gè)容器之前,我們需要先知道什么

    2024年02月08日
    瀏覽(21)
  • 【Torch API】pytorch 中repeat_interleave函數(shù)詳解

    torch. repeat_interleave ( input ,? repeats ,? dim=None )?→ Tensor Repeat elements of a tensor. Parameters input ?(Tensor) – the input tensor. repeats ?(Tensor ?or? int) – The number of repetitions for each element. repeats is broadcasted to fit the shape of the given axis. dim ?(int ,? optional ) – The dimension along which to repeat values

    2024年02月11日
    瀏覽(21)
  • 小白學(xué)Pytorch系列--Torch.nn API Vision Layers(15)

    小白學(xué)Pytorch系列--Torch.nn API Vision Layers(15)

    方法 注釋 nn.PixelShuffle 將形狀張量 ( ? , C r 2 , H , W ) (*,C r^2,H,W) ( ? , C r 2 , H , W ) 中的元素重新排列為形狀張量 ( ? , C , H r , W r ) (*,C,H r,W r) ( ? , C , Hr , W r ) ,其中r是一個(gè)高階因子。 nn.PixelUnshuffle 通過將形狀張量 ( ? , C , H r , W r ) (*,C,H r,W r) ( ? , C , Hr , W r

    2023年04月22日
    瀏覽(20)
  • PyTorch中的torch.nn.Linear函數(shù)解析

    PyTorch中的torch.nn.Linear函數(shù)解析

    torch.nn是包含了構(gòu)筑神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)基本元素的包,在這個(gè)包中,可以找到任意的神經(jīng)網(wǎng)絡(luò)層。這些神經(jīng)網(wǎng)絡(luò)層都是nn.Module這個(gè)大類的子類。torch.nn.Linear就是神經(jīng)網(wǎng)絡(luò)中的線性層,可以實(shí)現(xiàn)形如y=Xweight^T+b的加和功能。 nn.Linear():用于設(shè)置網(wǎng)絡(luò)中的全連接層,需要注意的是全連接

    2024年02月16日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包