亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > pytorch lstm gru rnn 得到每個state輸出的操作

pytorch lstm gru rnn 得到每個state輸出的操作

熱門標簽:儋州電話機器人 市場上的電銷機器人 小蘇云呼電話機器人 佛山400電話辦理 朝陽手機外呼系統(tǒng) 所得系統(tǒng)電梯怎樣主板設置外呼 北瀚ai電銷機器人官網(wǎng)手機版 北京電銷外呼系統(tǒng)加盟 地圖標注面積

默認只返回最后一個state,所以一次輸入一個step的input

# coding=UTF-8
import torch
import torch.autograd as autograd  # torch中自動計算梯度模塊
import torch.nn as nn  # 神經(jīng)網(wǎng)絡模塊
torch.manual_seed(1)
# lstm單元輸入和輸出維度都是3
lstm = nn.LSTM(input_size=3, hidden_size=3)
# 生成一個長度為5,每一個元素為1*3的序列作為輸入,這里的數(shù)字3對應于上句中第一個3
inputs = [autograd.Variable(torch.randn((1, 3)))
          for _ in range(5)]
# 設置隱藏層維度,初始化隱藏層的數(shù)據(jù)
hidden = (autograd.Variable(torch.randn(1, 1, 3)),
          autograd.Variable(torch.randn((1, 1, 3))))
for i in inputs:
  out, hidden = lstm(i.view(1, 1, -1), hidden)
  print(out.size())
  print(hidden[0].size())
  print("--------")
print("-----------------------------------------------")
# 下面是一次輸入多個step的樣子
inputs_stack = torch.stack(inputs)
out,hidden = lstm(inputs_stack,hidden)
print(out.size())
print(hidden[0].size())

print結果:

(1L, 1L, 3L)
(1L, 1L, 3L)
--------
(1L, 1L, 3L)
(1L, 1L, 3L)
--------
(1L, 1L, 3L)
(1L, 1L, 3L)
--------
(1L, 1L, 3L)
(1L, 1L, 3L)
--------
(1L, 1L, 3L)
(1L, 1L, 3L)
--------
----------------------------------------------
(5L, 1L, 3L)
(1L, 1L, 3L)

可見LSTM的定義都是不用變的,根據(jù)input的step數(shù)目,一次輸入多少step,就一次輸出多少output,但只輸出最后一個state

補充:pytorch中實現(xiàn)循環(huán)神經(jīng)網(wǎng)絡的基本單元RNN、LSTM、GRU的輸入、輸出、參數(shù)詳細理解

前言:這篇文章是對已經(jīng)較為深入理解了RNN、LSTM、GRU的數(shù)學原理以及運算過程的人而言的,如果不理解它的基本思想和過程,可能理解起來不是很簡單。

一、先從一個實例看起

這是官網(wǎng)上面的一個例子,本次以LSTM作為例子而言,實際上,GRU、LSTM、RNN的運算過程是很類似的。

import torch
import torch.nn as nn
 
lstm = nn.LSTM(10, 20, 2)
 
# 序列長度seq_len=5, batch_size=3, 數(shù)據(jù)向量維數(shù)=10
input = torch.randn(5, 3, 10)
 
# 初始化的隱藏元和記憶元,通常它們的維度是一樣的
# 2個LSTM層,batch_size=3,隱藏元維度20
h0 = torch.randn(2, 3, 20)
c0 = torch.randn(2, 3, 20)
 
# 這里有2層lstm,output是最后一層lstm的每個詞向量對應隱藏層的輸出,其與層數(shù)無關,只與序列長度相關
# hn,cn是所有層最后一個隱藏元和記憶元的輸出
output, (hn, cn) = lstm(input, (h0, c0))
 
print(output.size(),hn.size(),cn.size())
 
# 分別是:
# torch.Size([5, 3, 20])
# torch.Size([2, 3, 20])
# torch.Size([2, 3, 20]))

后面我會詳細解釋上面的運算過程,我們先看一下LSTM的定義,它是一個類

二、LSTM類的定義

class LSTM(RNNBase):
   
    '''參數(shù)Args:
        input_size: 輸入數(shù)據(jù)的特征維度,比如我對時間序列建模,特征為1,我對一個句子建模,每一個單詞的嵌入向量為10,則它為10
        
        hidden_size: 即循環(huán)神經(jīng)網(wǎng)絡中隱藏節(jié)點的個數(shù),這個是自己定義的,多少都可以,后面會詳說
        
        num_layers: 堆疊的LSTM的層數(shù),默認是一層,也可以自己定義 Default: 1
        bias: LSTM層是否使用偏置矩陣 偏置權值為 `b_ih` and `b_hh`.
            Default: ``True``(默認是使用的)
        
        batch_first: 如果設置 ``True``, then the input and output tensors are provided
            as (batch, seq, feature). Default: ``False``,(seq,batch,features)
        dropout: 是否使用dropout機制,默認是0,表示不使用dropout,如果提供一個非0的數(shù)字,則表示在每一個LSTM層之后默認使用dropout,但是最后一個層的LSTM層不使用dropout。
        
        bidirectional: 是否是雙向RNN,默認是否,If ``True``, becomes a bidirectional LSTM. Default: ``False``
#---------------------------------------------------------------------------------------
    類的構造函數(shù)的輸入為Inputs: input, (h_0, c_0)
        - **input** of shape `(seq_len, batch, input_size)`: tensor containing the features of the input sequence.
          
        - **h_0** of shape `(num_layers * num_directions, batch, hidden_size)`: tensor
          containing the initial hidden state for each element in the batch.
          If the LSTM is bidirectional, num_directions should be 2, else it should be 1.
        - **c_0** of shape `(num_layers * num_directions, batch, hidden_size)`: tensor
          containing the initial cell state for each element in the batch.
          If `(h_0, c_0)` is not provided, both **h_0** and **c_0** default to zero.
#----------------------------------------------------------------------------------
    輸出是什么:Outputs: output, (h_n, c_n)
        - **output** of shape `(seq_len, batch, num_directions * hidden_size)`: tensor
          containing the output features `(h_t)` from the last layer of the LSTM,
          for each `t`. If a :class:`torch.nn.utils.rnn.PackedSequence` has been
          given as the input, the output will also be a packed sequence.
          For the unpacked case, the directions can be separated
          using ``output.view(seq_len, batch, num_directions, hidden_size)``,
          with forward and backward being direction `0` and `1` respectively.
          Similarly, the directions can be separated in the packed case.
        
        - **h_n** of shape `(num_layers * num_directions, batch, hidden_size)`: tensor
          containing the hidden state for `t = seq_len`.
          Like *output*, the layers can be separated using
          ``h_n.view(num_layers, num_directions, batch, hidden_size)`` and similarly for *c_n*.
        
        - **c_n** of shape `(num_layers * num_directions, batch, hidden_size)`: tensor
          containing the cell state for `t = seq_len`.
#------------------------------------------------------------------------------------------
    類的屬性有Attributes:
        weight_ih_l[k] : the learnable input-hidden weights of the :math:`\text{k}^{th}` layer
            `(W_ii|W_if|W_ig|W_io)`, of shape `(4*hidden_size, input_size)` for `k = 0`.
            Otherwise, the shape is `(4*hidden_size, num_directions * hidden_size)`
        weight_hh_l[k] : the learnable hidden-hidden weights of the :math:`\text{k}^{th}` layer
            `(W_hi|W_hf|W_hg|W_ho)`, of shape `(4*hidden_size, hidden_size)`
        bias_ih_l[k] : the learnable input-hidden bias of the :math:`\text{k}^{th}` layer
            `(b_ii|b_if|b_ig|b_io)`, of shape `(4*hidden_size)`
        bias_hh_l[k] : the learnable hidden-hidden bias of the :math:`\text{k}^{th}` layer
            `(b_hi|b_hf|b_hg|b_ho)`, of shape `(4*hidden_size)`
    '''

上面的參數(shù)有點多,我就不一個一個翻譯了,其實很好理解,每一個都比較清晰。

三、 必需參數(shù)的深入理解

1、RNN、GRU、LSTM的構造函數(shù)的三個必須參數(shù)理解——第一步:構造循環(huán)層對象

在創(chuàng)建循環(huán)層的時候,第一步是構造循環(huán)層,如下操作:

lstm = nn.LSTM(10, 20, 2)

構造函數(shù)的參數(shù)列表為如下:

class LSTM(RNNBase):
   
    '''參數(shù)Args:
        input_size:
        hidden_size:         
        num_layers: 
        bias:       
        batch_first: 
        dropout: 
        bidirectional:
    '''

(1)input_size:指的是每一個單詞的特征維度,比如我有一個句子,句子中的每一個單詞都用10維向量表示,則input_size就是10;

(2)hidden_size:指的是循環(huán)層中每一個LSTM內部單元的隱藏節(jié)點數(shù)目,這個是自己定義的,隨意怎么設置都可以;

(3)num_layers:循環(huán)層的層數(shù),默認是一層,這個根據(jù)自己的情況來定。

比如下面:

左邊的只有一層循環(huán)層,右邊的有兩層循環(huán)層。

2、通過第一步構造的對象構造前向傳播的過程——第二步:調用循環(huán)層對象,傳入?yún)?shù),并得到返回值

一般如下操作:

output, (hn, cn) = lstm(input, (h0, c0))

這里是以LSTM為例子來說的,

(1)輸入?yún)?shù)

input:必須是這樣的格式(seq,batch,feature)。第一個seq指的是序列的長度,這是根據(jù)自己的數(shù)據(jù)來定的,比如我的一個句子最大的長度是20個單詞組成,那這里就是20,上面的例子是假設句子長度為5;第二個是batch,這個好理解,就是一次使用幾條樣本,比如3組樣本;第三個features指的是每一個單詞的向量維度,需要注意的是,這個必須要和構造函數(shù)的第一個參數(shù)input_size保持一樣的,上面的例子中是10.

(h0,c0):指的是每一個循環(huán)層的初始狀態(tài),可以不指定,不指定的情況下全部初始化為0,這里因為是LSTM有兩個狀態(tài)需要傳遞,所以有兩個,像普通的RNN和GRU只有一個狀態(tài)需要傳遞,則只需要傳遞一個h狀態(tài)即可,如下:

output, hn = rnn(input, h0)  # 普通rnn
output, hn = gru(input, h0)  # gru

這里需要注意的是傳入的狀態(tài)參數(shù)的維度,依然以LSTM來說:

h0和c0的數(shù)據(jù)維度均是(num_layers * num_directions, batch, hidden_size),這是什么意思呢?

第一個num_layer指的是到底有基層循環(huán)層,這好理解,幾層就應該有幾個初始狀態(tài);

第二個num_directions指的是這個循環(huán)層是否是雙向的(在構造函數(shù)中通過bidirectional參數(shù)指定哦),如果不是雙向的,則取值為1,如果是雙向的則取值為2;

第三個batch指的是每次數(shù)據(jù)的batch,和前面的batch保持一致即可;

最后一個hidden_size指的是循環(huán)層每一個節(jié)點內部的隱藏節(jié)點數(shù),這個需要很好地理解循環(huán)神經(jīng)網(wǎng)絡的整個運算流程才行哦!

(2)輸出結果

其實輸出的結果和輸入的是相匹配的,分別如下:

output, hn = rnn(input, h0)  # 普通rnn
output, hn = gru(input, h0)  # gru
output, (hn, cn) = lstm(input, (h0, c0)) # lstm

這里依然以lstm而言:

output的輸出維度(seq_len, batch, num_directions * hidden_size),在上面的例子中,應該為(5,3,20),我們通過驗證的確如此,需要注意的是,第一個維度是seq_len,也就是說每一個時間點的輸出都是作為輸出結果的,這和隱藏層是不一樣的;

hn、cn的輸出維度:為(num_layers * num_directions, batch, hidden_size),在上面的例子中為(2,3,20),也得到了驗證,我們發(fā)現(xiàn)這個跟序列長度seq_len是沒有關系的,為什么呢,輸出的狀態(tài)僅僅是指的是最后一個循環(huán)層節(jié)點輸出的狀態(tài)。

如下圖所示:

下面的例子是以普通的RNN來畫的,所以只有一個狀態(tài)h,沒有狀態(tài)c。

3、幾個重要的屬性理解

不管是RNN,GRU還是lstm,內部可學習的參數(shù)其實就是幾個權值矩陣,包括了偏置矩陣,那怎么查看這些學習到的參數(shù)呢?就是通過這幾個矩陣來實現(xiàn)的

(1)weight_ih_l[k]:這表示的是輸入到隱藏層之間的權值矩陣,其中K表示的第幾層循環(huán)層,

若K=0,表示的是最下面的輸入層到第一個循環(huán)層之間的矩陣,維度為(hidden_size, input_size),如果k>0則表示第一循環(huán)層到第二循環(huán)層、第二循環(huán)層到第三循環(huán)層,以此類推,之間的權值矩陣,形狀為(hidden_size, num_directions * hidden_size)。

(2)weight_hh_l[k]: 表示的是循環(huán)層內部之間的權值矩陣,這里的K表示的第幾層循環(huán)層,取值為0,1,2,3,4... ...。形狀為(hidden_size, hidden_size)

注意:循環(huán)層的層數(shù)取值是從0開始,0代表第一個循環(huán)層,1代表第二個循環(huán)層,以此類推。

(3)bias_ih_l[k]: 第K個循環(huán)層的偏置項,表示的是輸入到循環(huán)層之間的偏置,維度為 (hidden_size)

(4)bias_hh_l[k]:第K個循環(huán)層的偏置項,表示的是循環(huán)層到循環(huán)層內部之間的偏置,維度為 (hidden_size)

# 首先導入RNN需要的相關模塊
import torch
import torch.nn as nn
 
# 數(shù)據(jù)向量維數(shù)10, 隱藏元維度20, 2個RNN層串聯(lián)(如果是1,可以省略,默認為1)
rnn = nn.RNN(10, 20, 2)
 
# 序列長度seq_len=5, batch_size=3, 數(shù)據(jù)向量維數(shù)=10
input = torch.randn(5, 3, 10)
 
# 初始化的隱藏元和記憶元,通常它們的維度是一樣的
# 2個RNN層,batch_size=3,隱藏元維度20
h0 = torch.randn(2, 3, 20)
 
# 這里有2層RNN,output是最后一層RNN的每個詞向量對應隱藏層的輸出,其與層數(shù)無關,只與序列長度相關
# hn,cn是所有層最后一個隱藏元和記憶元的輸出
output, hn = rnn(input, h0)
 
print(output.size(),hn.size()) # 分別是:torch.Size([5, 3, 20])   torch.Size([2, 3, 20])
 
# 查看一下那幾個重要的屬性:
print("------------輸入--》隱藏------------------------------")
print(rnn.weight_ih_l0.size())  
print(rnn.weight_ih_l1.size())
print(rnn.bias_ih_l0.size())
print(rnn.bias_ih_l1.size())
print("------------隱藏--》隱藏------------------------------")
print(rnn.weight_hh_l0.size())  
print(rnn.weight_hh_l1.size())
print(rnn.bias_hh_l0.size())
print(rnn.bias_hh_l1.size())
 
'''輸出結果為:
------------輸入--》隱藏------------------------------
torch.Size([20, 10])
torch.Size([20, 20])
torch.Size([20])
torch.Size([20])
------------隱藏--》隱藏------------------------------
torch.Size([20, 20])
torch.Size([20, 20])
torch.Size([20])
torch.Size([20])
'''

通過上面的運算,發(fā)現(xiàn)結果和描述的是一模一樣的。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Pytorch實現(xiàn)LSTM和GRU示例
  • pytorch下使用LSTM神經(jīng)網(wǎng)絡寫詩實例
  • TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡
  • Pytorch 如何實現(xiàn)LSTM時間序列預測

標簽:定西 江蘇 商丘 云南 寧夏 酒泉 龍巖 金融催收

巨人網(wǎng)絡通訊聲明:本文標題《pytorch lstm gru rnn 得到每個state輸出的操作》,本文關鍵詞  pytorch,lstm,gru,rnn,得到,每個,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pytorch lstm gru rnn 得到每個state輸出的操作》相關的同類信息!
  • 本頁收集關于pytorch lstm gru rnn 得到每個state輸出的操作的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲精品中文一区不卡| 精品视频免费看| 精品视频一区二区三区| 美女免费毛片| 精品国产一区二区三区久久久狼| 久草免费资源| 日韩av片免费播放| 四虎影视库国产精品一区| 国产伦久视频免费观看 视频 | 国产一区二区高清视频| 成人免费高清视频| 欧美大片a一级毛片视频| 国产精品12| 精品国产亚洲一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人免费网站久久久| 二级片在线观看| 国产原创视频在线| 成人高清免费| 国产高清视频免费| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美日本二区| 999精品在线| 日本免费看视频| 国产一区二区精品久| 久草免费在线观看| 天天做日日爱夜夜爽| 97视频免费在线| 天天做人人爱夜夜爽2020| 精品国产一区二区三区久久久蜜臀| 国产精品123| 沈樵在线观看福利| 天天色色色| 日本乱中文字幕系列| 欧美a免费| 久久久久久久免费视频| 国产成人女人在线视频观看| 色综合久久久久综合体桃花网| 欧美大片毛片aaa免费看| 欧美另类videosbestsex久久| 日韩字幕在线| 免费的黄视频| 精品视频免费看| 一级女性全黄久久生活片| 国产视频一区二区在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美另类videosbestsex久久| 久草免费在线色站| 99久久精品国产国产毛片| 久久国产影院| 午夜激情视频在线播放| 香蕉视频久久| 国产一区二区精品| 久久国产一久久高清| 国产亚洲精品aaa大片| 欧美1卡一卡二卡三新区| 国产一区二区精品尤物| 国产网站免费| 欧美国产日韩一区二区三区| 亚洲 激情| 成人a大片高清在线观看| 精品视频在线观看免费| 国产不卡福利| 久久久成人影院| 日韩在线观看视频黄| 日本特黄特黄aaaaa大片| 你懂的在线观看视频| 国产91精品一区二区| 国产伦精品一区三区视频| 天天做日日干| 免费国产在线视频| 久久福利影视| 免费国产在线观看| 亚洲第一视频在线播放| 日韩在线观看视频黄| 91麻豆国产福利精品| 国产一区二区精品| 999久久久免费精品国产牛牛| 麻豆午夜视频| 麻豆系列国产剧在线观看| 国产激情一区二区三区| 久久国产精品自线拍免费| 精品视频在线看| 一本高清在线| 999精品视频在线| 午夜在线影院| 国产一区二区精品尤物| 国产国产人免费视频成69堂| 国产麻豆精品免费密入口| 九九热精品免费观看| 黄视频网站在线免费观看| 久久精品免视看国产成人2021| 欧美另类videosbestsex| 91麻豆国产福利精品| 91麻豆精品国产综合久久久| 欧美1区| 国产精品自拍亚洲| 欧美激情一区二区三区在线播放| 精品国产一区二区三区国产馆| 成人高清免费| 黄视频网站在线看| 在线观看成人网 | 91麻豆高清国产在线播放| 精品国产一区二区三区免费| 麻豆网站在线免费观看| 久草免费资源| 国产精品12| 天天做人人爱夜夜爽2020毛片| 久久久成人影院| 久久国产精品自线拍免费| 日本伦理片网站| 久久精品欧美一区二区| 久久久成人影院| 九九精品久久久久久久久| 日韩在线观看视频网站| 久久国产影视免费精品| 日韩字幕在线| 成人高清免费| 国产一区二区高清视频| 欧美日本免费| 免费国产在线观看| 你懂的在线观看视频| 毛片高清| 久久99青青久久99久久| 国产高清在线精品一区a| 日本在线不卡免费视频一区| 国产网站免费在线观看| 色综合久久天天综合观看| 国产视频一区二区在线观看| 国产视频网站在线观看| 国产视频一区在线| 亚久久伊人精品青青草原2020| 999久久狠狠免费精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 深夜做爰性大片中文| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 高清一级片| 亚洲第一色在线| 久久精品欧美一区二区| 二级特黄绝大片免费视频大片| 亚洲精品影院| 九九免费精品视频| 久久精品欧美一区二区| 国产91精品一区二区| 国产一区二区精品在线观看| 国产一区二区精品久久91| 日韩专区亚洲综合久久| 黄色免费三级| 国产伦精品一区三区视频| 99久久精品国产国产毛片| 亚洲 国产精品 日韩| 二级特黄绝大片免费视频大片| 精品国产一区二区三区久久久蜜臀| 成人影视在线播放| 亚欧视频在线| 尤物视频网站在线| 国产网站免费| 精品久久久久久综合网| 青青久久精品国产免费看| 四虎论坛| 日韩av东京社区男人的天堂| 精品视频一区二区三区| 韩国三级一区| 欧美激情一区二区三区中文字幕| 国产不卡在线播放| 国产福利免费视频| 美女免费黄网站| 日韩在线观看视频黄| 国产成人精品综合久久久| 91麻豆精品国产综合久久久| 国产91精品一区二区| 欧美1区| 可以免费在线看黄的网站| 亚洲精品中文字幕久久久久久| 999久久66久6只有精品| 成人免费观看的视频黄页| 久久国产精品永久免费网站| 精品在线视频播放| 日本乱中文字幕系列| 精品久久久久久综合网 | 欧美电影免费| 日本伦理黄色大片在线观看网站| 国产网站免费| 成人高清视频在线观看| 日韩欧美一及在线播放| 韩国毛片免费大片| 高清一级片| 超级乱淫伦动漫| 91麻豆精品国产自产在线观看一区| 日韩在线观看视频黄| 精品美女| 欧美1卡一卡二卡三新区| 国产高清视频免费观看| 欧美a级成人淫片免费看| 国产麻豆精品免费密入口| 国产高清视频免费| 免费国产在线观看| 久久精品免视看国产明星| 日韩专区一区| 日日日夜夜操|