[AI 수학적 기초]텐서연산(리덕션)

OasisGorilla·2024년 10월 8일
0

분석을 용이하게 하거나 복잡성을 줄여 연산에 용이하게 만들 목적으로 다차원 텐서의 차원을 줄이는 것

즉 어떤 방식이든 차원이 줄어들면 리덕션이라고 일단 이해했다.

  • 합(Sum)
  • 평균(Mean)
  • 최대(Max)
  • 최소(Min)

위와 같은 방법들이 있으며, 이번 공부에서는 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= 에 지우고 싶은 차원을 쓰면 해당 차원이 없어진다고 기능적으로 이해하고 넘어갔다.

0개의 댓글