#python-3.x #deep-learning #pytorch #tensor
Вопрос:
У меня есть несколько тензоров Pytorch в диапазоне от 1-мерного (например torch.Size([128]
) до 4-мерного (например torch.Size([256, 128, 3, 3])
. Каждый тензор представляет собой вес в нейронной сети.
Для каждого из этих тензоров мне нужно увеличить 1 или 2 измерения, например
torch.Size([128])
Дляtorch.Size([256])
,torch.Size([256, 128, 3, 3])
Дляtorch.Size([512, 256, 3, 3])
,torch.Size([3, 256, 1, 1])
Дляtorch.Size([3, 512, 1, 1])
.
Я посмотрел на torch.nn.Upsample
or nn.functional.interpolate
и аналогичные функции, но я не могу найти хорошего способа сделать это комплексно для каждой из моих проблем, кроме как жестко ее закодировать.
В случае простого примера 1D я ищу масштабированную версию моего исходного тензора, что-то вроде этого:
torch.arange(0, 9, dtype=torch.float32)
t = torch.arange(0, 9, dtype=torch.float32)
# = tensor([0., 1., 2., 3., 4., 5., 6., 7., 8.])
t_up = upsample(factor=2)
# = tensor([0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5., 5.5, 6., 6.5 7., 7.5, 8.])
Любая помощь будет признательна.
Ответ №1:
Ваш шаблон очень нерегулярен, так как:
torch.Size([128])
кtorch.Size([256])
— 1D и интерполировать всеtorch.Size([256, 128, 3, 3])
дляtorch.Size([512, 256, 3, 3])
—4D
и масштабирования первых двух измеренийtorch.Size([3, 256, 1, 1])
кtorch.Size([3, 512, 1, 1])
—3D
и масштабировать только второе измерение без первого
В этом случае нет четкого способа обойти «жесткое кодирование», и «умные» подходы, вероятно, только поднимут брови, когда кто-то просматривает ваш код.
- В вашем
1D
примере используетсяlinear
режим сalign_corners=False
, не уверен в4D
примерах, но для них потребуетсяbilinear
, по крайней мере, режим. size
дляtorch.nn.functional.interpolate
выравнивания1
размеров по какой-то причине, следовательно, толькоscale_factor
один вариант.- Некоторые данные должны быть изменены для интерполяции
В целом, жесткое кодирование и некоторые комментарии являются лучшим вариантом в этом случае, поскольку нет четкого способа сгруппировать различные способы расширения заданных вам тензоров (и попытка быть умным в этом случае, вероятно, является тупиком).
Комментарии:
1. спасибо, первые 2 действительно выполнимы
Upsample
. Однако я не нашел правильного решения третьей проблемы, когда любое из первых 2 измерений нуждается в дополнительной дискретизации.