У меня есть тензор data
формы [128, 4, 150, 150]
, где 128 - размер пакета, 4 - количество каналов, а последние 2 измерения - высота и ширина. У меня есть другой тензор fake
формы [128, 1, 150, 150]
.
Я хочу отбросить последний list/array
из 2-го измерения data
; форма данных теперь будет [128, 3, 150, 150]
; и объедините его с fake
, дав выходное измерение объединения как [128, 4, 150, 150]
.
По сути, другими словами, я хочу объединить первые 3 измерения data
с fake
, чтобы получить 4-мерный тензор.
Я использую PyTorch и наткнулся на функции torch.cat()
и torch.stack()
.
Вот пример кода, который я написал:
fake_combined = []
for j in range(batch_size):
fake_combined.append(torch.stack((data[j][0].to(device), data[j][1].to(device), data[j][2].to(device), fake[j][0].to(device))))
fake_combined = torch.tensor(fake_combined, dtype=torch.float32)
fake_combined = fake_combined.to(device)
Но я получаю сообщение об ошибке в строке:
fake_combined = torch.tensor(fake_combined, dtype=torch.float32)
Ошибка:
ValueError: only one element tensors can be converted to Python scalars
Кроме того, если я напечатаю форму fake_combined
, я получу на выходе [128,]
вместо [128, 4, 150, 150]
И когда я печатаю форму fake_combined[0]
, я получаю результат как [4, 150, 150]
, что соответствует ожиданиям.
Итак, мой вопрос: почему я не могу преобразовать список в тензор, используя torch.tensor()
. Я что-то упускаю? Есть ли лучший способ сделать то, что я собираюсь делать?
Любая помощь будет оценена по достоинству! Спасибо!