내 연락처 정보
우편메소피아@프로톤메일.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 3차원 텐서를 나타냅니다.
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)
3차원 텐서에서는 첫 번째 차원이 배치 크기를 나타내기 때문에 각 4x4 행렬이 연산 시 여전히 2차원 방식으로 처리되는 것으로 보입니다. 그러나 배치 차원이 추가되므로 합계 연산에서 2차원 텐서와 다르게 동작합니다.
구체적으로: