Вычислить среднее значение по одному конкретному измерению 4D тензора в Pytorch

У меня есть тензор функций видео PyTorch формы [66,7,7,1024], и мне нужно преобразовать его в [1024,66,7,7]. Как переставить тензорную фигуру? Кроме того, как получить среднее значение по dimension=1? то есть после выполнения среднего размера с размером 66 мне нужно, чтобы тензор был [1024,1,7,7].

Я попытался вычислить среднее значение размерности = 1, но мне не удалось заменить его средним значением. И я не мог представить себе четырехмерный тензор, в котором одно измерение заменено его средним значением.

Изменить: я пробовал torch.mean (my_tensor, dim = 1). Но это возвращает мне тензор формы [1024,7,7]. Тензор 4D конвертируется в 3D. Но я хочу, чтобы он оставался 4D с формой [1024,1,7,7].

Большое тебе спасибо.


person MinMin    schedule 21.12.2019    source источник
comment
Загляните в numpy.transpose. Новые оси будут - (3,0,1,2) или (3,0,2,1).   -  person Divakar    schedule 21.12.2019
comment
@Divakar transpose дает мне (3,1,2,0). Я делаю что-то неправильно?   -  person MinMin    schedule 21.12.2019
comment
Я имел в виду np.transpose(a,(3,0,1,2)), где a был входным массивом. Также проверьте эквивалент numpy.transpose в PyTorch. Кроме того, не уверен, что вы имели в виду под транспонированием, дающим вам (3,1,2,0).   -  person Divakar    schedule 21.12.2019
comment
Я мог бы получить форму [3,0,1,2] из numpy в тензор, используя torch.from_numpy(my_numpy_features.transpose([3,0,1,2])).   -  person MinMin    schedule 21.12.2019
comment
Используйте keepdim=True с методом mean.   -  person Divakar    schedule 21.12.2019
comment
Я считаю, что на форуме pytorch уже есть фантастический ответ (проверьте окончательный ответ), и отправьте его, если у вас все еще есть вопросы: обсудить.pytorch.org/t/whats-different-between-dim-1-and-dim-0/   -  person Charlie Parker    schedule 03.02.2021


Ответы (1)


На первую часть вопроса дан ответ в разделе комментариев. Таким образом, мы можем использовать tensor.transpose([3,0,1,2]) для преобразования тензора в форму [1024,66,7,7].

Теперь среднее значение по временному измерению может быть взято torch.mean(my_tensor, dim=1). Это даст трехмерный тензор формы [1024,7,7]. Чтобы получить тензор формы [1024,1,7,7], мне пришлось отжать в размерности = 1:

tensor = tensor.unsqueeze(1)

person MinMin    schedule 22.12.2019
comment
просматривали ли вы обсуждение. pytorch.org/t/whats-different-between-dim-1-and-dim-0/ что вы думаете об этом? Возможно, вам поможет полный рабочий пример кода. - person Charlie Parker; 03.02.2021