합, 뺄셈, 곱
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/
여기서 실제 어떻게 곱해져서 행렬이 만들어지는지 볼 수 있다.
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]
'인공지능 > 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 |