다음 글은 파이토치 코리아의 기본 익히기 글을 참고하여 작성하였습니다.
텐서, Tensor
텐서는 배열(Array)나 행렬(Matrix)와 매우 유사한 자료구조로 Pytorch에서는 텐서를 사용하여 모델의 입력과 출력, 매개변수들을 부호화(encode)합니다.
Numpy의 ndarray와 거의 동일하여 텐서를 생성하는 함수도 비슷합니다.
텐서 초기화
데이터로부터 직접 생성이 가능하며, Numpy 배열로부터도 생성이 가능합니다.
- torch.tensor(data)
- torch.from_numpy(ndarray_data)
명시적으로 재정의하지 않는다면, 텐서의 구조는 그대로 유지됩니다.
torch.tensor와 torch.Tensor의 차이
\(\rightarrow\) 둘다 똑같이 PyTorch의 텐서를 생성하는 함수입니다. 하지만, torch.Tensor 는 클래스 메소드(Python class, in torch.Tensor)라서 데이터를 넣어주면 그대로 사용해서 새로운 텐서를 생성하는 반면, torch.tensor는 함수(Python function, in torch.tensor)라서 데이터를 넣어주면 주어진 데이터를 복사하여 새로운 텐서를 생성합니다.
따라서, torch.Tensor는 빈 Tensor를 생성할 때 사용하고, torch.tensor는 이미 데이터가 존재하는 Tensor를 생성할 때 사용합니다.
텐서 속성
텐서의 속성은 shape, datatype, device로 device를 제외하고 numpy와 동일합니다.
텐서 연산
전치, 인덱싱, 슬라이싱, 수학 계산, 선형 대수, 샘플링 등 여러가지 연산이 가능합니다.
기본적으로 텐서는 cpu에 생성되며, .to 메소드를 사용하여 GPU로 이동이 가능합니다.
사칙 연산
\(\rightarrow\) 행렬 곱셈 연산 함수는 mm을 사용합니다.(Numpy와 차이)
텐서 변환
view
Numpy의 reshape와 동일하게 tensor의 shape를 변환합니다.
reshape와의 차이점은, contiguity 보장의 차이가 있습니다.
squeeze
차원의 개수가 1인 차원을 삭제 (압축) 합니다.
unsqueeze
차원의 개수가 1인 차원을 추가 합니다.
gather
torch.gather(input, dim, index, out)
주어진 Tensor의 dim 축을 따라서 index Tensor가 가리키는 값들을 가져와 out Tensor에 반환합니다.
인덱스를 이용해 원하는 값을 추출할 때 주로 사용합니다.
위 코드의 결과값은 [x[0][1], x[1][0], x[2][2]] 가 됩니다.
tensor의 대각선 요소를 가져오기
'ML & DL > PyTorch' 카테고리의 다른 글
[PyTorch] Optimization, 최적화 (0) | 2023.03.13 |
---|---|
[PyTorch] Autograd, 자동 미분 (0) | 2023.03.13 |
[PyTorch] DATASET과 DATALOADER (0) | 2023.03.13 |
PyTorch 란 ? (0) | 2023.03.13 |
[Pytorch] Mixed Precision Training (0) | 2021.12.04 |