개발로 자기계발
article thumbnail
728x90

합, 뺄셈, 곱

tensor = torch.tensor([1,2,3])

# 합
tensor + 10
torch.add(tensor, 10)

# 곱
tensor * 10
torch.mul(tensor, 10)

# 뺄셈
tensor - 10
torch.sub(tensor, 10)

 

행렬곱

tensor * tensor

곱해서 tensor([1, 4, 9]) 행렬로 돌려준다.

두 개의 1차원 텐서를 원소별로 곱한 결과를 반환

torch.matmul(tensor, tensor)
tensor @ tensor

곱해서 tensor(14) 전체를 더한 값으로 돌려준다.

두 개의 1차원 텐서를 벡터로 간주하여 내적(dot product)을 계산한 결과를 반환

다만 현재 1차원의 텐서이기에 더한 값을 돌려준 것.

 

※ matmul vs for 문

%%time
value = 0
for i in range(len(tensor)):
  value += tensor[i] * tensor[i]

print(value)

tensor(14)
CPU times: user 2.37 ms, sys: 21 µs, total: 2.39 ms
Wall time: 2.4 ms

%%time
torch.matmul(tensor, tensor)

CPU times: user 588 µs, sys: 0 ns, total: 588 µs
Wall time: 495 µs
tensor(14)

속도면에서 엄청난 차이를 보여준다.

 

torch.matmul(torch.rand(3,4), torch.rand(4,3))

3행 3열을 return 한다.

torch.matmul(torch.rand(4,3), torch.rand(3,4))

4행 4열을 return 한다.


이해가 가질 않는다면
http://matrixmultiplication.xyz/

 

Matrix Multiplication

 

matrixmultiplication.xyz

여기서 실제 어떻게 곱해져서 행렬이 만들어지는지 볼 수 있다.


tensor_A = torch.tensor([[1,2],
                         [3,4],
                         [5,6]])

tensor_B = torch.tensor([[7,8],
                         [9,10],
                         [11,12]])

2개의 tensor는 서로가 가지는 모양이 다르게 때문에 내적을 할 수 없다.

그렇다면 방법은?

 

Transpose

tensor_B.T, tensor_B.T.shape

행과 열의 위치를 바꿔준다.

3행 2열 -> 2행 3열

torch.matmul(tensor_A, tensor_B.T)

에러 없이 내적 된 값을 볼 수 있다.

 

최소 / 최대 / 평균

x = torch.arange(0, 100, 10)

범위로 값을 얻은 후에

torch.min(x), x.min(x)

최소 값을 구하는 방법에는 2가지가 있다.

torch.mean(x.type(torch.float32)), x.type(torch.float32).mean()

평균값을 구하는 방법에는 2가지가 있다.

단, int(Long)은 mean을 쓸 수가 없기 때문에 type을 float로 변경해 준다.

torch.sum(x), x.sum()

합계를 구하는 방법에는 2가지가 있다.

 

인덱스 최소 / 최대

x.argmin(), x[0]

argmin() 함수를 사용하면 최솟값의 인덱스를 알 수 있다.

x.argmax(), x[9]
728x90
SMALL

'인공지능 > PyTorch' 카테고리의 다른 글

PyTorch - 파이토치 기초 (6)  (0) 2023.04.23
PyTorch - 파이토치 기초 (5)  (0) 2023.04.23
PyTorch - 파이토치 기초 (3)  (0) 2023.04.18
PyTorch - 텐서란? (2)  (0) 2023.04.18
PyTorch - 파이토치란? (1)  (0) 2023.04.17
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)