首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pytorch中的keras.layers.Masking相当于什么?

pytorch中的keras.layers.Masking相当于什么?
EN

Stack Overflow用户
提问于 2019-12-31 22:17:43
回答 1查看 2.4K关注 0票数 3

我有时间序列,我需要通过将零填充到矩阵中并在keras中使用keras.layers.Masking来保持序列长度固定到一个数字,我可以忽略这些填充的零进行进一步的计算,我想知道如何在Pytorch中做到这一点?

要么我需要在pytroch和pytorch中做填充,而pytorch不能处理可变长度的序列,这相当于pytorch中keras的掩蔽层,或者如果pytorch处理不同长度的序列,怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-31 23:52:40

您可以使用PackedSequence类作为keras掩蔽的等价物。您可以在torch.nn.utils.rnn上找到更多功能

下面是来自packing for variable-length sequence inputs for rnn的示例

代码语言:javascript
运行
复制
import torch
import torch.nn as nn
from torch.autograd import Variable

batch_size = 3
max_length = 3
hidden_size = 2
n_layers =1

# container
batch_in = torch.zeros((batch_size, 1, max_length))

#data
vec_1 = torch.FloatTensor([[1, 2, 3]])
vec_2 = torch.FloatTensor([[1, 2, 0]])
vec_3 = torch.FloatTensor([[1, 0, 0]])

batch_in[0] = vec_1
batch_in[1] = vec_2
batch_in[2] = vec_3

batch_in = Variable(batch_in)

seq_lengths = [3,2,1] # list of integers holding information about the batch size at each sequence step

# pack it
pack = torch.nn.utils.rnn.pack_padded_sequence(batch_in, seq_lengths, batch_first=True)

>>> pack
PackedSequence(data=Variable containing:
 1  2  3
 1  2  0
 1  0  0
[torch.FloatTensor of size 3x3]
, batch_sizes=[3])


# initialize
rnn = nn.RNN(max_length, hidden_size, n_layers, batch_first=True) 
h0 = Variable(torch.randn(n_layers, batch_size, hidden_size))

#forward 
out, _ = rnn(pack, h0)

# unpack
unpacked, unpacked_len = torch.nn.utils.rnn.pad_packed_sequence(out)

>>> unpacked
Variable containing:
(0 ,.,.) = 
 -0.7883 -0.7972
  0.3367 -0.6102
  0.1502 -0.4654
[torch.FloatTensor of size 1x3x2]

更多的你会发现这篇文章很有用。Jum to Title -“PackedSequence对象如何工作”- link

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59545229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档