欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pytorch對(duì)可變長(zhǎng)度序列的處理方法詳解

 更新時(shí)間:2018年12月08日 12:14:35   作者:深度學(xué)習(xí)1  
今天小編就為大家分享一篇pytorch對(duì)可變長(zhǎng)度序列的處理方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

主要是用函數(shù)torch.nn.utils.rnn.PackedSequence()和torch.nn.utils.rnn.pack_padded_sequence()以及torch.nn.utils.rnn.pad_packed_sequence()來(lái)進(jìn)行的,分別來(lái)看看這三個(gè)函數(shù)的用法。

1、torch.nn.utils.rnn.PackedSequence()

NOTE: 這個(gè)類(lèi)的實(shí)例不能手動(dòng)創(chuàng)建。它們只能被 pack_padded_sequence() 實(shí)例化。

PackedSequence對(duì)象包括:

一個(gè)data對(duì)象:一個(gè)torch.Variable(令牌的總數(shù),每個(gè)令牌的維度),在這個(gè)簡(jiǎn)單的例子中有五個(gè)令牌序列(用整數(shù)表示):(18,1)

一個(gè)batch_sizes對(duì)象:每個(gè)時(shí)間步長(zhǎng)的令牌數(shù)列表,在這個(gè)例子中為:[6,5,2,4,1]

用pack_padded_sequence函數(shù)來(lái)構(gòu)造這個(gè)對(duì)象非常的簡(jiǎn)單:

pytorch對(duì)可變長(zhǎng)度序列的處理

如何構(gòu)造一個(gè)PackedSequence對(duì)象(batch_first = True)

PackedSequence對(duì)象有一個(gè)很不錯(cuò)的特性,就是我們無(wú)需對(duì)序列解包(這一步操作非常慢)即可直接在PackedSequence數(shù)據(jù)變量上執(zhí)行許多操作。特別是我們可以對(duì)令牌執(zhí)行任何操作(即對(duì)令牌的順序/上下文不敏感)。當(dāng)然,我們也可以使用接受PackedSequence作為輸入的任何一個(gè)pyTorch模塊(pyTorch 0.2)。

2、torch.nn.utils.rnn.pack_padded_sequence()

這里的pack,理解成壓緊比較好。 將一個(gè) 填充過(guò)的變長(zhǎng)序列 壓緊。(填充時(shí)候,會(huì)有冗余,所以壓緊一下)

輸入的形狀可以是(T×B×* )。T是最長(zhǎng)序列長(zhǎng)度,B是batch size,*代表任意維度(可以是0)。如果batch_first=True的話,那么相應(yīng)的 input size 就是 (B×T×*)。

Variable中保存的序列,應(yīng)該按序列長(zhǎng)度的長(zhǎng)短排序,長(zhǎng)的在前,短的在后。即input[:,0]代表的是最長(zhǎng)的序列,input[:, B-1]保存的是最短的序列。

NOTE: 只要是維度大于等于2的input都可以作為這個(gè)函數(shù)的參數(shù)。你可以用它來(lái)打包labels,然后用RNN的輸出和打包后的labels來(lái)計(jì)算loss。通過(guò)PackedSequence對(duì)象的.data屬性可以獲取 Variable。

參數(shù)說(shuō)明:

input (Variable) – 變長(zhǎng)序列 被填充后的 batch

lengths (list[int]) – Variable 中 每個(gè)序列的長(zhǎng)度。

batch_first (bool, optional) – 如果是True,input的形狀應(yīng)該是B*T*size。

返回值:

一個(gè)PackedSequence 對(duì)象。

3、torch.nn.utils.rnn.pad_packed_sequence()

填充packed_sequence。

上面提到的函數(shù)的功能是將一個(gè)填充后的變長(zhǎng)序列壓緊。 這個(gè)操作和pack_padded_sequence()是相反的。把壓緊的序列再填充回來(lái)。

返回的Varaible的值的size是 T×B×*, T 是最長(zhǎng)序列的長(zhǎng)度,B 是 batch_size,如果 batch_first=True,那么返回值是B×T×*。

Batch中的元素將會(huì)以它們長(zhǎng)度的逆序排列。

參數(shù)說(shuō)明:

sequence (PackedSequence) – 將要被填充的 batch

batch_first (bool, optional) – 如果為T(mén)rue,返回的數(shù)據(jù)的格式為 B×T×*。

返回值: 一個(gè)tuple,包含被填充后的序列,和batch中序列的長(zhǎng)度列表。

例子:

import torch
import torch.nn as nn
from torch.autograd import Variable
from torch.nn import utils as nn_utils
batch_size = 2
max_length = 3
hidden_size = 2
n_layers =1
 
tensor_in = torch.FloatTensor([[1, 2, 3], [1, 0, 0]]).resize_(2,3,1)
tensor_in = Variable( tensor_in ) #[batch, seq, feature], [2, 3, 1]
seq_lengths = [3,1] # list of integers holding information about the batch size at each sequence step
 
# pack it
pack = nn_utils.rnn.pack_padded_sequence(tensor_in, seq_lengths, batch_first=True)
 
# initialize
rnn = nn.RNN(1, hidden_size, n_layers, batch_first=True)
h0 = Variable(torch.randn(n_layers, batch_size, hidden_size))
 
#forward
out, _ = rnn(pack, h0)
 
# unpack
unpacked = nn_utils.rnn.pad_packed_sequence(out)
print('111',unpacked)

輸出:

111 (Variable containing:
(0 ,.,.) =
 0.5406 0.3584
 -0.1403 0.0308
 
(1 ,.,.) =
 -0.6855 -0.9307
 0.0000 0.0000
[torch.FloatTensor of size 2x2x2]
, [2, 1])

以上這篇pytorch對(duì)可變長(zhǎng)度序列的處理方法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python mock測(cè)試的示例

    python mock測(cè)試的示例

    這篇文章主要介紹了python mock測(cè)試的示例,幫助大家利用python進(jìn)行模擬接口測(cè)試,感興趣的朋友可以了解下
    2020-10-10
  • pycharm配置Anaconda虛擬環(huán)境全過(guò)程

    pycharm配置Anaconda虛擬環(huán)境全過(guò)程

    這篇文章主要介紹了pycharm配置Anaconda虛擬環(huán)境全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python之多線程退出與停止的一種實(shí)現(xiàn)思路

    Python之多線程退出與停止的一種實(shí)現(xiàn)思路

    這篇文章主要介紹了Python之多線程退出與停止的一種實(shí)現(xiàn)思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python裝飾器底層原理詳解

    python裝飾器底層原理詳解

    這篇文章主要介紹了python裝飾器底層原理講解,被裝飾對(duì)象加上裝飾器,被裝飾對(duì)象獲得了更強(qiáng)大的功能,更多相關(guān)內(nèi)容,需要的朋友可以參考一下
    2022-07-07
  • python  dataclass 快速創(chuàng)建數(shù)據(jù)類(lèi)的方法

    python  dataclass 快速創(chuàng)建數(shù)據(jù)類(lèi)的方法

    在Python中,dataclass是一種用于快速創(chuàng)建數(shù)據(jù)類(lèi)的裝飾器和工具,本文實(shí)例代碼中我們定義了一個(gè)Person數(shù)據(jù)類(lèi),并使用fields()函數(shù)遍歷其字段,打印出每個(gè)字段的名稱(chēng)、類(lèi)型、默認(rèn)值和元數(shù)據(jù),對(duì)python  dataclass 數(shù)據(jù)類(lèi)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2024-03-03
  • Python內(nèi)建類(lèi)型int源碼學(xué)習(xí)

    Python內(nèi)建類(lèi)型int源碼學(xué)習(xí)

    這篇文章主要為大家介紹了Python內(nèi)建類(lèi)型int源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python+numpy實(shí)現(xiàn)一個(gè)蜘蛛紙牌游戲

    Python+numpy實(shí)現(xiàn)一個(gè)蜘蛛紙牌游戲

    蜘蛛紙牌大家玩過(guò)沒(méi)有?之前的電腦上自帶的游戲,用他來(lái)摸魚(yú)過(guò)的舉個(gè)手。但是現(xiàn)在的電腦上已經(jīng)沒(méi)有蜘蛛紙牌了。所以本文就來(lái)用Python做一個(gè)吧,需要的可以參考一下
    2022-12-12
  • 詳解Python如何利用Pandas與NumPy進(jìn)行數(shù)據(jù)清洗

    詳解Python如何利用Pandas與NumPy進(jìn)行數(shù)據(jù)清洗

    許多數(shù)據(jù)科學(xué)家認(rèn)為獲取和清理數(shù)據(jù)的初始步驟占工作的 80%,花費(fèi)大量時(shí)間來(lái)清理數(shù)據(jù)集并將它們歸結(jié)為可以使用的形式。本文將利用 Python 的 Pandas和 NumPy 庫(kù)來(lái)清理數(shù)據(jù),需要的可以參考一下
    2022-04-04
  • Python3實(shí)現(xiàn)漢語(yǔ)轉(zhuǎn)換為漢語(yǔ)拼音

    Python3實(shí)現(xiàn)漢語(yǔ)轉(zhuǎn)換為漢語(yǔ)拼音

    這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)漢語(yǔ)轉(zhuǎn)換為漢語(yǔ)拼音,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python ConfigParser模塊的使用示例

    Python ConfigParser模塊的使用示例

    這篇文章主要介紹了Python ConfigParser模塊的使用示例,幫助大家更好的理解和學(xué)習(xí)Python ConfigParser模塊的用法,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論