Hello Computer Vision

[pytorch] 기본적인 tensor 조작해보기 본문

딥러닝/파이토치

[pytorch] 기본적인 tensor 조작해보기

지웅쓰 2024. 2. 6. 23:57

딥러닝 훈련을 시키면서 가벼운 텐서로 세팅할 때도 있는데 이럴 때마다 구글을 서칭한다.. 그래서 torch의 가벼운 문법을 정리해보려고 한다.

a = torch.tensor(1)
b = torch.tensor([1])
c = torch.tensor([[1,2, 3], [3,4,5]])

print(a)
print(a.shape)

print(b)
print(b.shape)

print(c)
print(c.shape)
tensor(1)
torch.Size([])
tensor([1])
torch.Size([1])
tensor([[1, 2, 3],
        [3, 4, 5]])
torch.Size([2, 3])

이렇게 가벼운 텐서 정도는 torch.tensor를 사용해서 생성할 수 있다. 

 

a = torch.arange(1, 40)
print(len(a))

39

이렇게 나열할 텐서에 대해서 len 함수도 적용할 수 있다.

 

a = torch.rand(2,3,4)
b = a.unsqueeze(-1)
print(b.shape)
torch.Size([2, 3, 4, 1])

차원을 다룰 때 unsqueeze같은 경우 dim 인자를 -1로 두어 마지막 차원을 늘릴 수 있다.

 

a = torch.arange(1, 10+1)
print(a.topk(3))
torch.return_types.topk(
values=tensor([10,  9,  8]),
indices=tensor([9, 8, 7]))

지난 번에도 다루었던 topk 함수이다. 상위 몇번째 값까지 반환하는지 인자로 줄 수 있다. 해당 메소드는 튜플 값을 반환하는데 첫번째 값은 value값, 두번째 값은 인덱스 값이다.

 

a = torch.arange(1, 10+1)
print(a.argmax(0))

b = torch.rand(3, 4)
print(b.argmax(1))

tensor(9)
tensor([1, 3, 0])

torch자체의 메소드를 통해 해당 차원에서 가장 높은 값의 index를 반환하는 argmax도 활용할 수 있다.

a = torch.rand(2,3)
b = torch.rand(2,3).unsqueeze(-1)
print(b.view_as(a).shape)

torch.Size([2, 3])

view_as 메소드를 통해 크기를 맞추어줄 수있는데 여기서 주의할 점은 총 보유한 텐서가 같아야 활용할 수 있다. 모양이 완전히 다르더라도 보유한 텐서만 같다면 크기를 맞추어줄 수 있다,

a = torch.rand(2,3)
b = torch.rand(1,6).unsqueeze(-1)
print(b.view_as(a).shape)

torch.Size([2, 3])

그리고 classification 훈련할 때 다음과 몇개나 맞았는지 알 필요가 있는데 그럴 때는 eq메소드를 활용할 수 있다.

a = torch.arange(1, 6)
b = torch.tensor([1,2,4,3,5])
c = a.eq(b)
print(c)
print(c.sum())

tensor([ True,  True, False, False,  True])
tensor(3)

 

'딥러닝 > 파이토치' 카테고리의 다른 글

[pytorch] 데이터셋 합치기  (0) 2024.02.17
[pytorch] 행렬 계산  (0) 2024.02.17
[pytorch] Nan, inf알아보기  (0) 2024.02.06
[pytorch] load state dict 후 업데이트  (0) 2024.01.22
CIFAR10-C 데이터셋 다루기  (0) 2024.01.20