Deep Learning/개념

2-2. Pytorch 튜토리얼_사칙연산과 Broadcast

박째롱 2024. 10. 2. 00:07

[Pytorch 사칙연산]

Tensor끼리의 사칙연산

Tensor끼리의 사칙연산은 python의 문법과 동일하며 행렬의 계산과 동일하게 적용됨

 

Inplace Operation

print(a)
print(a.mul(b))
print(a)
print(a.mul_(b)) # a에 a.mul(b)를 덮어씌움(기존에 있는 메모리에 할당) -- _를 붙임
print(a)
tensor([[1., 2.],
        [3., 4.]])
tensor([[ 2.,  4.],
        [ 9., 12.]])
tensor([[1., 2.],
        [3., 4.]])
tensor([[ 2.,  4.],
        [ 9., 12.]])
tensor([[ 2.,  4.],
        [ 9., 12.]])

 

Sum, Mean (Dimension Reducing Operations)

특정 Dimension에 대해서만 Reduction

x = torch.FloatTensor([[1, 2],
                       [3, 4]])
                       
print(x.sum(dim=0))
print(x.sum(dim=-1))
tensor([4., 6.])
tensor([3., 7.])

 

 

[Broadcast in operation]

Broadcast를 통해 차원이 다른 tensor끼리도 연산이 가능함

 

Tensor + Scalar

모든 Tensor 칸에 숫자(Scalar)가 더해짐

 

Tensor + Vector

없는 차원이 있으면 tensor의 차원을 돌려서(?) 앞에 1,1 을 넣어서 차원을 맞춤

x = torch.FloatTensor([[1, 2],
                       [4, 8]])
y = torch.FloatTensor([3,
                       5])

print(x.size())
print(y.size())
torch.Size([2, 2])
torch.Size([2])

y.size를 [1,2]로 생각해봄 (tensor의 각도를 바꾸어봄)

z = x + y
print(z)
print(z.size())
tensor([[ 4.,  7.],
        [ 7., 13.]])
torch.Size([2, 2])

 

Tensor + Tensor

동일한 형태의 Tensor로 만들기 위해 차원을 추가하여 연산 [2,2]

x = torch.FloatTensor([[1, 2]])
y = torch.FloatTensor([[3],
                       [5]])

print(x.size())
print(y.size())
torch.Size([1, 2])
torch.Size([2, 1])
z = x + y
print(z)
print(z.size())
tensor([[4., 5.],
        [6., 7.]])
torch.Size([2, 2])