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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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