파이토치 #2
2024. 1. 17.

Tensor

1)Tensor
2)Tensor 생성
3)Attributes of a Tensor
4)Tensor 연산
5)Bridge with Numpy
 

Operation on Tensors

1)Tensor 연산
2)Creation Operation
3)Indexing, Slicing, Joining, Mutating Ops
4)Math operations
5)Disabling gradient computation
 
 

Tensor의 정의와 특징

  • 텐서는 인공지능을 위한 데이터의 특수한 구조로써 배열과 행렬과 매우 유사
  • PyTorch에서는 텐서를 사용하여 모델의 입력출력 뿐만 아니라 모델의 매개 변수를 인코딩
  • 텐서는 GPU나 다른 하드웨어 가속기에서 실행할 수 있다는 점을 제외하고는 NumPy의 ndarrays와 유사
  • 텐서와 NumPy 배열은 종종 동일한 기본 메모리를 공유 가능하므로 데이터를 복사할 필요성이 없음
  • 텐서는 또한 Auto Diff에 최적화되어 있음

    * Auto Diff: Y햇과 Y 값의 pred(차이)를 구해서 optimization 함수로 최적 값을 산출한 미분 값을
       자동으로 계산하고 입력한다. 즉, 한 번 등록된 변수는 자동으로 갱신해주는 기술

Tensor 생성방법

직접 생성

  • 데이터로부터 직접적으로 텐서 생성이 가능
  • 자료형은 자동으로 유추되어 적용
  • 단, specific한 자료형이 필요한 경우, 사용자가 정의 가능

Numpy 배열로부터 생성

  • Numpy array로부터 텐서 생성 가능
  • 텐서에서 Numpy array로 역변환도 가능
    (Bridge with Numpy 참고)

다른 텐서로부터 생성

새로운 텐서는 명시적으로 재정의되지 않는 한 인수 텐서의 속성(모양, 데이터 유형)을 유지
즉, float이나 int 같이 형태 함수를 취하지 않으면, 인수 그대로 행렬이 생성.

 

 

랜덤하게 또는 상수 변수

 
shape튜플로 표시된 텐서의 차원 정보
즉, 행렬의 행과 열을 결정

 

텐서 속성은 모양, 데이터 유형 및 저장된 디바이스(CPU or GPU)를 설명

tensor.shape -> 행과 열
tensor.dtype ->  자료형
나머지는 뭐...

 

 

 

Tensor 연산에서 주의할 점

 
  • 기본적으로, 텐서는 CPU에서 생성
  • GPU를 사용하고자 할 경우, 텐서를 GPU로 명시적으로 이동해야 함
  • 디바이스에서 큰 텐서를 복사하는 것은 시간과 메모리 측면에서 비효율적
    즉, 너무 큰 데이터를 사용하면 시간이 오래 걸린다는 말이다.
    ex) 데이터가 150GB가 있다. tensor로 변환된다. (torch의 16/32/64)에 따라 용량차이가 압도적으로 늘어난다.
  • 더보기
    학습을 시킬 경우|

    배치가 한 번 돌아갈 경우를 산정해보자.

    데이터/모델/타겟 값/opt/loss function이 존재한다.
    데이터를 모델을 통해 1번 배치를 돌린다. 이때 배치사이즈가 64면 64뭉치만 GPU에 싣는다.
    그 외 모델/타켓값/opt/loss를 GPU에 싣어서 연산을 시작한다.
  • Tensor의 연산은 같은 디바이스 내에서만 가능
 

* 이는 optimizer와 loss함수도 마찬가지이다. 이들은 (명시)가 필수이다.

즉, 데이터를 tensor와 input하고, 모델을 만들고, 설명이 없다면, 자동으로 CPU(메모리)로 input,  
또는, 데이터를 tensor와 input하고, 모델을 만들고, 설명(명시) 한다면, GPU(메모리)로 input

tensor를 .to cuda 디바이스쪽으로 보내라.

 

Indexing and Slicing
Numpy 환경과 비슷하게 데이터를 인덱싱하거나 슬라이싱 할 수 있음

Joining
다른 두 텐서를 합칠 수 있음

Arithmetic Operation
텐서를 통해서 산술 연산을 할 수 있음

 

In-place operations

In-place: 결과를 피연산자에 저장하는 작업
Pytorch에서 접미사 _로 표시된 함수들은 inplace 작업을 수행.: x.copy_(y), x.t_()
 
 

Bridge with Numpy

Tensor to Numpy array

주의할 점은 텐서가 numpy array에 영향을 줄 수 있음

 

Numpy array to Tensor

반대 경우에도 성립
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

'2023 > pytorch' 카테고리의 다른 글

[1] 파이토치_기본_240128  (1) 2024.01.28
파이토치 #3  (0) 2024.01.23
파이토치 #1  (0) 2024.01.16