Я согласен с @ helloswift123, вы не можете складывать тензоры различной длины.
Кроме того, ответ @ helloswift123 будет работать только тогда, когда общее количество элементов делится на желаемую форму. В этом случае общее количество элементов равно 19
, и ни в коем случае оно не может быть преобразовано во что-то полезное, поскольку это простое число.
torch.cat()
, как предлагается,
data = [torch.tensor([-0.1873, -0.6180, -0.3918, -0.5849, -0.3607]),
torch.tensor([-0.6873, -0.3918, -0.5849, -0.9768, -0.7590, -0.6707]),
torch.tensor([-0.6686, -0.7022, -0.7436, -0.8231, -0.6348, -0.4040, -0.6074, -0.6921])]
dataTensor = torch.cat(data)
dataTensor.numel()
Вывод:
tensor([-0.1873, -0.6180, -0.3918, -0.5849, -0.3607, -0.6873, -0.3918, -0.5849,
-0.9768, -0.7590, -0.6707, -0.6686, -0.7022, -0.7436, -0.8231, -0.6348,
-0.4040, -0.6074, -0.6921])
19
Возможное решение:
Это также не идеальное решение, но может решить эту проблему.
# Have a list of tensors (which can be of different lengths)
data = [torch.tensor([-0.1873, -0.6180, -0.3918, -0.5849, -0.3607]),
torch.tensor([-0.6873, -0.3918, -0.5849, -0.9768, -0.7590, -0.6707]),
torch.tensor([-0.6686, -0.7022, -0.7436, -0.8231, -0.6348, -0.4040, -0.6074, -0.6921])]
# Determine maximum length
max_len = max([x.squeeze().numel() for x in data])
# pad all tensors to have same length
data = [torch.nn.functional.pad(x, pad=(0, max_len - x.numel()), mode='constant', value=0) for x in data]
# stack them
data = torch.stack(data)
print(data)
print(data.shape)
Вывод:
tensor([[-0.1873, -0.6180, -0.3918, -0.5849, -0.3607, 0.0000, 0.0000, 0.0000],
[-0.6873, -0.3918, -0.5849, -0.9768, -0.7590, -0.6707, 0.0000, 0.0000],
[-0.6686, -0.7022, -0.7436, -0.8231, -0.6348, -0.4040, -0.6074, -0.6921]])
torch.Size([3, 8])
Это добавит нули к концу любого тензора с меньшим количеством элементов, и в этом случае вы можете использовать torch.stack()
как обычно.
Надеюсь, это поможет!