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])