如何转换二维张量和索引张量以便用于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

如何从数据集中移除EXIF数据?

我在尝试从数据集中的图像中移除EXIF数据(这些数据将…

用于Python中的“智能点”游戏的遗传算法不工作

过去几天我一直在尝试实现所谓的“智能点”游戏。我第一次…

哪个R平方得分更有帮助?

data.drop(‘Movie Title’, ax…

使用线性回归预测GRE分数对录取率的影响

我正在学习线性回归,并尝试在Jupyter笔记本中用P…

使用mlrMBO贝叶斯优化进行SVM超参数调优时出现错误

我试图针对一个分类任务优化SVM,这个方法在许多其他模…

Keras模型的二元交叉熵准确率未发生变化

我在网上看到了很多关于这个问题的提问,但没有找到明确的…

发表回复

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