如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下:

sequences = torch.tensor([[2,1],[5,6],[3,0]])indexes = torch.tensor([1,0,1])

也就是说,序列0仅由[5,6]组成,而序列1[2,1], [3,0]组成。从数学上讲,sequence[i] = { sequences[j] 只要 i = indexes[j] }

我需要将这些序列输入到LSTM中。由于这些是变长序列,PyTorch文档建议使用类似torch.nn.utils.rnn.pack_sequence的方法。

遗憾的是,这种方法及其类似方法需要输入一个张量列表,每个张量都是L x *形式,其中L是单个序列的长度。

如何构建可以输入PyTorch LSTM的数据结构?

附注:在整个代码中,我使用scattergather功能处理这些张量,但找不到使用它们来实现这一目标的方法。


回答:

我找到了一个替代且更高效的分离序列的方法:

sequences = torch.tensor([[2,1],[5,6],[3,0]])indexes = torch.tensor([1,0,1])sorted_src = src[indexes.argsort()]indexes_count = torch.unique(indexes, return_counts=True)[1]splitted = torch.split(sorted_src, indexes_count.tolist(), dim=0)

这种方法比@***提出的方法快近三倍。

使用timeit模块测量,序列为(5000,256)的张量,索引为(1500)的张量

Related Posts

关于k折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

在PyTorch中,如何将与cuda()相关的代码转换为CPU版本?

我有一些现有的PyTorch代码,其中包含cuda()…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注