본문 바로가기
딥러닝&머신러닝/파이토치 기본 문법

[PYTORCH] POINTWISE OPS

by David.Ho 2023. 1. 10.
728x90
반응형

파이토치의 공식 문서에 Math operations 부분을 살펴보면 pointwise로 연산을 한다고 한다.

pointwise로 연산을 한다는 것은 문자 그대로 함수의 정의역에 있는 각 점마다 연산을 한다는 내용이다. 즉, 특정 속성이 각 값을 고려하여 정의 된다는 것이다. Tensor를 구성하는 각 data에 대해 각각 연산을 적용한다는 뜻이다. 따라서 입력 텐서와 출력 텐서의 차원의 크기는 서로 같다.

 

 

 

▼ pointwise에 대한 수학적 정의

파이토치의 공식문서에서 소개한 Pointwise Ops 중 3개를 예시코드로 함께 알아보려 한다.

  1. torch.addcmul
  2. torch.exp
  3. torch.pow

torch.addcmul

torch.addcmul은 pointwise로 tensor1에 tensor2를 곱한다. 곱한 결과를 value라는 스칼라 값을 곱해 input에 더한다. 이를 수식으로 나타내면 아래와 같다.

torch.addcmul(input, tensor1, tensor2, *, value=1, out=None) -> Tensor

이때 tensor1`과 `tensor2의 텐서의 모양은 반드시 broadcastable 해야한다.

t = torch.arange(9, 0, -1).reshape(3, 3)
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
result = t.addcmul(a, b)
print(result)

실행 결과

tensor([[13, 18, 25],
        [10, 15, 22],
        [ 7, 12, 19]])

torch.exp

torch.exp는 입력 텐서 input의 각 원소의 밑이 자연상수 e인 지수를 반환한다.

x = torch.arange(0, 10, 0.5)
y = torch.exp(x)
print(y)

실행 결과

tensor([1.0000e+00, 1.6487e+00, 2.7183e+00, 4.4817e+00, 7.3891e+00, 1.2182e+01,
        2.0086e+01, 3.3115e+01, 5.4598e+01, 9.0017e+01, 1.4841e+02, 2.4469e+02,
        4.0343e+02, 6.6514e+02, 1.0966e+03, 1.8080e+03, 2.9810e+03, 4.9148e+03,
        8.1031e+03, 1.3360e+04])

torch.pow

torch.pow 는input`의 각 원소를 밑으로 하는 `exponent`의 지수를 반환한다. `exponent`의 값은 하나의 float 값일 수 있고 입력 텐서와 원소의 수가 같은 Tensor일 수 있다. 이 경우 `input`과 `exponent는 반드시 broadcastable 해야 한다.

a = torch.arange(5)
print(torch.pow(a, 2))
exp = torch.arange(5)
print(torch.pow(a, exp))

실행 결과

tensor([ 0,  1,  4,  9, 16])
tensor([  1,   1,   4,  27, 256])
728x90
반응형

댓글