簡體   English   中英

將張量列表轉換為張量pytorch

[英]converting list of tensors to tensors pytorch

我有張量列表每個張量具有不同的大小我如何使用pytroch將這張張量列表轉換為張量

有關更多信息,我的列表包含張量,每個張量具有不同的大小,例如,第一個張量大小為torch.Size([76080,38])

其他張量的形狀在第二個元素中會有所不同,例如列表中的第二個張量是torch.Size([76080,36])

當我使用torch.tensor(x)時出現錯誤ValueError:只能將一個元素張量轉換為Python標量

pytorch中的Tensor與python中的List ,它可以容納可變長度的對象。

在pytorch中,您可以將固定長度的數組傳輸到Tensor:

>>> torch.Tensor([[1, 2], [3, 4]])
>>> tensor([[1., 2.],
            [3., 4.]])

而不是:

>>> torch.Tensor([[1, 2], [3, 4, 5]])
>>> 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-809c707011cc> in <module>
----> 1 torch.Tensor([[1, 2], [3, 4, 5]])

ValueError: expected sequence of length 2 at dim 1 (got 3)

torch.stack

張量不能保存可變長度的數據。 你可能正在尋找

例如,在這里,我們有一個列表,其中包含兩個具有不同大小的張量(在最后一個dim(dim = 2)中),並且我們想創建一個包含它們的更大張量,因此我們可以使用cat並創建一個更大的張量包含他們的兩個數據。

還請注意,截至目前 ,您不能在cpu上使用帶有半張量的cat,因此您應該將它們轉換為float,進行串聯,然后再轉換回一半

import torch

a = torch.arange(8).reshape(2, 2, 2)
b = torch.arange(12).reshape(2, 2, 3)
my_list = [a, b]
my_tensor = torch.cat([a, b], dim=2)
print(my_tensor.shape) #torch.Size([2, 2, 5])

您尚未說明目標,因此另一種選擇是使用pad_sequence像這樣:

from torch.nn.utils.rnn import pad_sequence
a = torch.ones(25, 300)
b = torch.ones(22, 300)
c = torch.ones(15, 300)
pad_sequence([a, b, c]).size() #torch.Size([25, 3, 300])

編輯:在這種情況下,您可以使用torch.cat([x.float() for x in sequence], dim=1).half()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM