моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
import torch
x = torch.arange(16).reshape(1,4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
a3 = x.sum(axis = 0,keepdim=True)
a4 = x.sum(axis = 0,keepdim=False)
a5 = x.sum(axis = 2,keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
import torch
x = torch.arange(16).reshape(4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
print(a)
print(a2)
print(x/a)
Объедините эти два примера, чтобы подробно объяснить изменения оси при различных обстоятельствах.
Понимание размерных операций с тензорами и суммированием по определенным осям в PyTorch требует немного времени. Давайте проанализируем эти операции шаг за шагом на двух примерах и подробно объясним изменение оси в разных ситуациях.
import torch
x = torch.arange(16).reshape(1, 4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
a3 = x.sum(axis=0, keepdim=True)
a4 = x.sum(axis=0, keepdim=False)
a5 = x.sum(axis=2, keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Это форма (1, 4, 4)
тензоров. Мы можем думать об этом как о пакете, содержащем матрицу 4x4.
x.sum(axis=1, keepdim=True)
Суммируйте по оси 1 (т. е. направлению второго измерения, 4), сохраняя размеры.
tensor([[[24, 28, 32, 36]]])
Форма становится (1, 1, 4)
。
x.sum(axis=1, keepdim=False)
Суммируем по оси 1, размерность не сохраняется.
tensor([[24, 28, 32, 36]])
Форма становится (1, 4)
。
x.sum(axis=0, keepdim=True)
Суммируйте по оси 0 (т. е. направлению первого измерения, 1), сохраняя размеры.
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Поскольку исходный тензор имеет только один элемент на оси 0, результат тот же, что и исходный тензор, с формой (1, 4, 4)
。
x.sum(axis=0, keepdim=False)
Сумма по оси 0, размерность не сохраняется.
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Форма становится (4, 4)
。
x.sum(axis=2, keepdim=True)
Суммируйте по оси 2 (т. е. третьему измерению, направлению 4), сохраняя размеры.
tensor([[[ 6],
[22],
[38],
[54]]])
Форма становится (1, 4, 1)
。
keepdim=True
Суммарные измерения сохранятся, количество измерений результата останется неизменным, но размер суммируемых измерений станет равным 1.keepdim=False
Суммированные измерения будут удалены, а количество измерений в результате уменьшится на 1.import torch
x = torch.arange(16).reshape(4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
print(a)
print(a2)
print(x/a)
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Это форма (4, 4)
тензоров.
x.sum(axis=1, keepdim=True)
Суммируйте по оси 1 (т. е. направлению второго измерения, 4), сохраняя размеры.
tensor([[ 6],
[22],
[38],
[54]])
Форма становится (4, 1)
。
x.sum(axis=1, keepdim=False)
Суммируем по оси 1, размерность не сохраняется.
tensor([ 6, 22, 38, 54])
Форма становится (4,)
。
x / a
tensor([[0.0000, 0.1667, 0.3333, 0.5000],
[0.1818, 0.2273, 0.2727, 0.3182],
[0.2105, 0.2368, 0.2632, 0.2895],
[0.2222, 0.2407, 0.2593, 0.2778]])
Это сумма каждого элемента, разделенная на соответствующую ему строку, в результате чего:
tensor([[ 0/6, 1/6, 2/6, 3/6],
[ 4/22, 5/22, 6/22, 7/22],
[ 8/38, 9/38, 10/38, 11/38],
[12/54, 13/54, 14/54, 15/54]])
использовать keepdim=True
При сохранении размеров суммарная размерность становится равной 1.использоватьkeepdim=False
При , суммированные размеры удаляются.
Почему строки находятся в столбцах, а не в reshape (1, 4, 4) Только тогда, когда reshape (4, 4) находится в строках?
Сначала рассмотрим основные понятия:
(4, 4)
import torch
x = torch.arange(16).reshape(4, 4)
print(x)
Выход:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Форма этого тензора (4, 4)
, представляет матрицу 4x4:
ХОРОШОгоризонтально:
[ 0, 1, 2, 3]
[ 4, 5, 6, 7]
[ 8, 9, 10, 11]
[12, 13, 14, 15]
Списоквертикально:
[ 0, 4, 8, 12]
[ 1, 5, 9, 13]
[ 2, 6, 10, 14]
[ 3, 7, 11, 15]
(1, 4, 4)
x = torch.arange(16).reshape(1, 4, 4)
print(x)
Выход:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Форма этого тензора (1, 4, 4)
, представляет собой трехмерный тензор 1x4x4:
1
, указывающий размер партии.4
, представляет количество строк (строк на матрицу).4
, представляет количество столбцов (столбцов каждой матрицы).(4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Выход:
tensor([[ 6],
[22],
[38],
[54]])
(1, 4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Выход:
tensor([[[24, 28, 32, 36]]])
существовать (1, 4, 4)
В трехмерном тензоре первое измерение представляет размер пакета, поэтому кажется, что каждая матрица 4х4 при работе по-прежнему обрабатывается двумерным образом. Однако, поскольку добавляется пакетное измерение, оно ведет себя иначе, чем двумерный тензор в операции суммирования.
Конкретно: