Вот небольшой пример того, что я хочу сделать:
С тензорами и масками ниже:
Код: Выделить всё
x = torch.zeros(2, 3, 4, 6)
mask = torch.tensor([[ True, True, False], [True, False, True]])
y = torch.rand(2, 3, 1, 3)
Код: Выделить всё
x[mask, :, :3] = y[mask]
- В измерениях 0 и 1 только фрагменты 4x6/1x3 в x/тому, чей соответствующий элемент в маске имеет значение True, разрешено присваивать.
Код: Выделить всё
y - Я надеюсь, что в измерении 2 тензор из 1 строки в y может транслироваться на все 8 строк x,
- В измерении 3 только первым трем элементам x присваиваются 3 -тензор элемента из y.
Код: Выделить всё
RuntimeError: shape mismatch: value tensor of shape [4, 1, 3] cannot be broadcast to indexing result of shape [4, 3, 6]
Я' я тоже пробовал
Код: Выделить всё
x[mask][:, :, :3] = y[mask]
Я знаю, что могу назначать по срезу и по маске шаг за шагом, но надеюсь избежать любые промежуточные тензоры, если это возможно.
Тензоры в нейронных сетях могут быть очень большими, поэтому выполнение комплексного присваивания может занять меньше времени и меньше памяти.
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-pytorch
Мобильная версия