#python-3.x #pytorch #tensor
#python-3.x #pytorch #тензор
Вопрос:
Я пытаюсь выяснить, как перезаписать объект torch.tensor, расположенный внутри dict, новым torch.tensor, который немного длиннее из-за заполнения.
# pad the tensor
zeros = torch.zeros(55).long()
zeros[zeros == 0] = 100 # change to padding
temp_input = torch.cat([batch['input_ids'][0][0], zeros], dim=-1) # cat
temp_input.shape # [567]
batch['input_ids'][0][0].shape # [512]
batch['input_ids'][0][0] = temp_input
# The expanded size of the tensor (512) must match the existing size (567) at non-singleton dimension 0. Target sizes: [512]. Tensor sizes: [567]
Я изо всех сил пытаюсь найти способ расширить значения тензора на месте или перезаписать их, если размеры изменяются.
Dict передается из загрузчика данных torch и выглядит следующим образом:
{'input_ids': tensor([[[ 101, 3720, 2011, ..., 25786, 2135, 102]],
[[ 101, 1017, 2233, ..., 0, 0, 0]],
[[ 101, 1996, 2899, ..., 14262, 20693, 102]],
[[ 101, 2197, 2305, ..., 2000, 1996, 102]]]),
'attn_mask': tensor([[[1, 1, 1, ..., 1, 1, 1]],
[[1, 1, 1, ..., 0, 0, 0]],
[[1, 1, 1, ..., 1, 1, 1]],
[[1, 1, 1, ..., 1, 1, 1]]]),
'cats': tensor([[-0.6410, 0.1481, -2.1568, -0.6976],
[-0.4725, 0.1481, -2.1568, 0.7869],
[-0.6410, -0.9842, -2.1568, -0.6976],
[-0.6410, -0.9842, -2.1568, -0.6976]], grad_fn=<StackBackward>),
'target': tensor([[1],
[0],
[1],
[1]]),
'idx': tensor([1391, 4000, 293, 830])}
Комментарии:
1. Я не думаю, что вы можете это сделать. Тензоры разных размеров не могут быть объединены в пакет.