国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

pytorch對可變長度序列的處理方法詳解

2020-02-16 00:00:43
字體:
來源:轉載
供稿:網友

主要是用函數torch.nn.utils.rnn.PackedSequence()和torch.nn.utils.rnn.pack_padded_sequence()以及torch.nn.utils.rnn.pad_packed_sequence()來進行的,分別來看看這三個函數的用法。

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

NOTE: 這個類的實例不能手動創建。它們只能被 pack_padded_sequence() 實例化。

PackedSequence對象包括:

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

一個batch_sizes對象:每個時間步長的令牌數列表,在這個例子中為:[6,5,2,4,1]

用pack_padded_sequence函數來構造這個對象非常的簡單:

pytorch對可變長度序列的處理

如何構造一個PackedSequence對象(batch_first = True)

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

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

這里的pack,理解成壓緊比較好。 將一個 填充過的變長序列 壓緊。(填充時候,會有冗余,所以壓緊一下)

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

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

NOTE: 只要是維度大于等于2的input都可以作為這個函數的參數。你可以用它來打包labels,然后用RNN的輸出和打包后的labels來計算loss。通過PackedSequence對象的.data屬性可以獲取 Variable。

參數說明:

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

lengths (list[int]) – Variable 中 每個序列的長度。

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

返回值:

一個PackedSequence 對象。

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

填充packed_sequence。

上面提到的函數的功能是將一個填充后的變長序列壓緊。 這個操作和pack_padded_sequence()是相反的。把壓緊的序列再填充回來。

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

Batch中的元素將會以它們長度的逆序排列。

參數說明:

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

batch_first (bool, optional) – 如果為True,返回的數據的格式為 B×T×*。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三江| 广河县| 韶关市| 龙胜| 灵寿县| 临湘市| 许昌市| 丽水市| 冕宁县| 兖州市| 如皋市| 壤塘县| 苗栗市| 梁山县| 洪洞县| 梓潼县| 贵溪市| 舞钢市| 三门峡市| 理塘县| 石泉县| 平山县| 临海市| 上虞市| 峨山| 成武县| 子洲县| 清涧县| 乌兰察布市| 枣庄市| 东宁县| 商城县| 右玉县| 海南省| 西乌珠穆沁旗| 章丘市| 焦作市| 大同县| 福泉市| 阜南县| 楚雄市|