我有时间序列序列,我需要通过将零填充到矩阵中并在 keras 中使用 keras.layers.Masking 来将序列的长度固定为一个数字,我可以忽略那些填充的零以进行进一步的计算,我想知道怎么可能在 Pytorch 中完成?
要么我需要在 pytroch 中进行填充,而 pytorch 无法处理不同长度的序列,相当于 pytorch 中的 keras 掩蔽层,或者如果 pytorch 处理不同长度的序列,怎么办?
最佳答案
您可以使用 PackedSequence类等同于 keras 屏蔽。您可以在 torch.nn.utils.rnn
找到更多功能
这里放的例子来自 packing for variable-length sequence inputs for rnn
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]
更多你会发现这篇文章很有用。 [跳转到标题 - “PackedSequence 对象的工作原理”] - link
关于keras - pytorch 中的 keras.layers.Masking 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59545229/