Hello Computer Vision

[pytorch] 행렬 계산 본문

딥러닝/파이토치

[pytorch] 행렬 계산

지웅쓰 2024. 2. 17. 17:49

이번에 논문에 나온 값들이 어떻게 변하는지 알아보려던 찰나에 아무 생각 없이 * 연산자를 쓰니까 원하던 값들이 안나와서 적어두려고 한다.

 

x = torch.tensor([[0.85, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.07]])
xt = torch.transpose(x, 0, 1)
i = torch.eye(10)
diag = torch.diag(x)
xx = xt * x
k = (i + 8*i - 8*xx)
k = torch.inverse(k)
pseudo = k.matmul(xt)
p = torch.mul(k, xt).sum(0)
print(xt.shape)
print(x.shape)
print(i.shape)
print(xx.shape)
print(k.shape)
print(pseudo.shape)
print(pseudo)
print(p)
torch.Size([10, 1])
torch.Size([1, 10])
torch.Size([10, 10])
torch.Size([10, 10])
torch.Size([10, 10])
torch.Size([10, 1])
tensor([[0.2678],
        [0.0032],
        [0.0032],
        [0.0032],
        [0.0032],
        [0.0032],
        [0.0032],
        [0.0032],
        [0.0032],
        [0.0221]])
tensor([0.2678, 0.0032, 0.0032, 0.0032, 0.0032, 0.0032, 0.0032, 0.0032, 0.0032,
        0.0221])

기본적으로 *, mul을 사용하면 element wise 곱셈이 되버려서 원하는 행렬크기, 값들이 안나온다. 따라서 행렬간의 내적을 하고 싶으면 matmul 을 사용해야하고 *을 사용한다면 sum 을 해줘야한다.