728x90
1. 텐서 다루기
1.1 텐서 생성 및 변환
텐서는 파이토치의 가장 기본의 되는 데이터 구조이다. 넘파이의 ndarray와 비슷하며 GPU에서의 연산도 가능하다.
텐서 생성은 다음과 같은 코드를 이용한다.
print(torch.tensor([[1, 2], [3, 4]])) # 2차원 형태의 텐서 생성
print('=======================')
print(torch.tensor([[1, 2], [3, 4]], device='cuda:0')) # GPU에 텐서 생성
print('=======================')
print(torch.tensor([[1, 2], [3, 4]], dtype=torch.float64)) # dtype을 이용하여 텐서 생성
tensor([[1, 2],
[3, 4]])
=======================
tensor([[1, 2],
[3, 4]], device='cuda:0')
=======================
tensor([[1., 2.],
[3., 4.]], dtype=torch.float64)
텐서를 ndarray로 변환해보자.
temp = torch.tensor([[1, 2], [3, 4]])
temp.numpy() # 텐서를 ndarray로 변환
temp = torch.tensor([[1, 2], [3, 4]], device='cuda:0')
temp.to('cpu').numpy() # gpu상의 텐서를 cpu텐서로 변환한 후 ndarray로 변환
array([[1, 2],
[3, 4]])
array([[1, 2],
[3, 4]])
1.2 텐서의 인덱스 조작
텐서는 넘파이의 ndarray를 조작하는 것과 유사하게 동작하기 때문에 배열처럼 인덱스를 바로 지정하거나 슬라이스 등을 사용할 수 있다.
temp = torch.FloatTensor([1, 2, 3, 4, 5, 6, 7])
print(temp[0], temp[1]) # 인덱스로 접근
print(temp[0:3]) # 슬라이스로 접근
tensor(1.) tensor(2.)
tensor([1., 2., 3.])
1.3 텐서 차원 조작
텐서는 넘파이의 ndarray처럼 다양한 수학 연산이 가능하며, GPU를 사용하면 더 빠르게 연산할 수 있따. 참고로 텐서 간의 타입이 다르면 연산이 불가능하다.
텐서의 차원을 변경하는 가장 대표적인 방법은 view를 이용하는 것이다(하지만 reshape을 더 권장한다고 한다. 나도 reshape이 더 익숙하기도 하고). 이외에도 텐서를 결합하는 stack, cat과 차원을 교환하는 t, transpose도 사용된다.
temp = torch.tensor([[1, 2], [3, 4]])
print(temp.shape)
print('=======================')
print(temp.view(4, 1)) # 2x2 행렬을 4x1 행렬로 변형
print('=======================')
print(temp.view(-1)) # 2x2 행렬을 1차원 벡터로 변형
print('=======================')
print(temp.view(1, -1)) # 2x2 행렬을 1x4 행렬로 변형
print('=======================')
torch.Size([2, 2])
=======================
tensor([[1],
[2],
[3],
[4]])
=======================
tensor([1, 2, 3, 4])
=======================
tensor([[1, 2, 3, 4]])
=======================
tensor([[1],
[2],
[3],
[4]])
728x90
'딥러닝 > Pytorch' 카테고리의 다른 글
Pytorch 기본 문법 - 모델 훈련 (0) | 2022.05.23 |
---|---|
Pytorch 기본 문법 - 파라미터 정의 (0) | 2022.05.23 |
Pytorch 기본 문법 - 모델 정의 (0) | 2022.05.23 |
Pytorch 기본 문법 - 데이터 준비 (1) | 2022.05.18 |
Pytorch 개요 (0) | 2022.05.18 |