gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:20:20 25 4
gpt4 key购买 nike

我有时间序列序列,我需要通过将零填充到矩阵中并在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com