분석을 용이하게 하거나 복잡성을 줄여 연산에 용이하게 만들 목적으로 다차원 텐서의 차원을 줄이는 것
즉 어떤 방식이든 차원이 줄어들면 리덕션이라고 일단 이해했다.
위와 같은 방법들이 있으며, 이번 공부에서는 sum만 다루어 보았다.
X = np.array([[25, 2], [5, 26], [3, 7]]) # (3, 2)
X_pt = torch.tensor(X)
print(X.sum()) # 68
print(torch.sum(X_pt)) # tensor(68)
sum은 원소를 전부 더하는 기능이다. 여기에 axis= 속성을 추가하면 보다 정교하게 작업할 수 있다.
print(X.sum(axis=0)) # [33, 35]
print(torch.sum(X_pt, 0)) # tensor([33, 35])
X_sum = X.sum(axis=0)
print(X_sum.shape) # (2,)
axis=n은 해당 축(차원)을 따라 합하라는 뜻이다.
2차원 텐서에서는 0과 1까지, 3차원 텐서에서는 0, 1, 2까지 있다.
위의 2차원 텐서 X는 3행 2열의 텐서로 (3, 2)의 shape를 갖는다.
axis=0은 3, axis=1은 2이다.
X.sum(axis=0)을 하게되면 (3, 2)의 shape가 (2,)의 shape로 변한다.
차원이 줄었으니 reduction이 일어났다.
정리하면 axis= 에는 없애고 싶은 차원을 쓰는 것이다.
# 4차원 텐서 생성 (2개의 이미지, 3개의 채널, 4x4 크기)
X = np.random.rand(2, 3, 4, 4)
# axis=0: 배치 차원에 대해 합산
print(X.sum(axis=0).shape) # 결과: (3, 4, 4)
# axis=1: 채널 차원에 대해 합산
print(X.sum(axis=1).shape) # 결과: (2, 4, 4)
# axis=2: 높이 차원에 대해 합산
print(X.sum(axis=2).shape) # 결과: (2, 3, 4)
# axis=3: 너비 차원에 대해 합산
print(X.sum(axis=3).shape) # 결과: (2, 3, 4)
이미지 데이터를 다루는 4차원 텐서를 예시로 sum을 사용해봤다.
위처럼 axis= 에 지우고 싶은 차원을 쓰면 해당 차원이 없어진다고 기능적으로 이해하고 넘어갔다.