Programming/python-deep learning

Pytorch로 Tensor Operation 다루는 법! (기본 기능 모음)

방황하는 데이터불도저 2023. 9. 1. 19:00

지난 글에 이어서 numpy가 아닌 pytorch에서 tensor를 다룰 수 있는 함수들에 대해 정리해보았습니다.


tensor에 대한 개념이 익숙하지 않으신 분들은 해당 글을 먼저 읽고 오시는 것을 추천드립니다!

https://kyull-it.tistory.com/158

 

Tensor란 무엇인가? (+ Python Numpy Tensor 구현 및 기본 기능)

Tensor란 무엇일까? 우리는 중고등학생때, 스칼라, 벡터, 행렬까지 배웠다. 0차원인 스칼라, 1차원인 벡터, 2차원인 행렬,,, 그럼 3차원부터는?! 그게 바로 텐서라고 하는 것이다. 3차원 이상은 모두

kyull-it.tistory.com


tensor 생성하기

import torch

torch.FloatTensor( )        # np.array( ) 와 같은 함수.
    # torch.Tensor — PyTorch 2.0 documentation 
torch.FloatTensor(t)        # t = np.array( ) 일 때, 파이토치 텐서로 변환 가능.

0 또는 1으로만 이루어진 tensor 생성방법

torch.ones_like( t )          # 텐서t과 같은 사이즈의 1로 채워진 텐서를 출력함.
torch.zeros_like( t )         # 0

torch.ones( size=[ ] )          # 사이즈에 따라 1로 채워진 텐서를 출력
torch.zeros( size=[ ] )        # 0

tensor 속성 확인하기

t.dim            # 텐서의 차원을 표시
 
t.shape        # 텐서의 형태를 ( , ) 튜플 형태로 표시 

t.size           # 텐서의 크기를 표시 = 원소의 개수

세부 속성들

t.mean()                      # 텐서의 모든 원소에 대한 평균

t.mean(dim=0)           # 텐서의 차원 제거와 함께 평균 구하기. dim=0 은 shape의 가장 첫 차원을 말함.

t.sum(dim=None)            # 텐서의 모든 원소에 대한 합계. (dim 설정할 경우 차원 제거 가능)

t.max(dim=None)            # 텐서의 모든 원소에 대한 최대값 및 index 출력. (dim 설정할 경우 차원 제거 가능)

t.argmax(dim=None)            # 텐서의 모든 원소에 대한 최대값이 있는 index만 출력. (dim 설정할 경우 차원 제거 가능)

tensor의 곱

m1.matmul(m2)           # m1 m2 - Matrix Multiplication (내적을 통한 행렬의 곱셈)

m1.mul(m2)                 # m1 m2 - element-wise Multiplication (행렬의 원소별 곱셈)

tensor의 형태 변형, 변환

t.view( [shape] )            # 텐서의 형태 변경. numpy의 reshape역할. 3차원→3차원, 2차원 가능

t.squeeze( )            # 텐서의 차원이 1인 경우. 1인 차원을 제거함.

t.unsqueeze( dim=number )            # 텐서의 차원을 number위치에 1차원 더 추가해줌.

tensor 합치기. 연결하기. 병합.

torch.cat([t1, t2, t3,,,,], dim=0)          # 여러 텐서들을 연결(concatenate) - 각 텐서를 squeeze하고 연결하기 때문에, 텐서의 차원이 하나 줄어든다.

torch.stack([t1, t2, t3,,,,], dim=0)          # 여러 텐서들을 연결(concatenate) - squeeze하지 않고, 그대로 연결하기 때문에 더 유용하게 쓰인다고 함.

추가적인 꿀팁

  1. 브로드 캐스팅 (Broadcasting)

    두 텐서의 차원이 서로 다를 때에도  연산을 할 수 있도록 해주는 기능.
       * A텐서 + A텐서보다 차원이 작은 텐서 ==> 연산이 가능하다.
       * ex. scalar (array) + vector 또는 scalar (array) + matrix

  2. 타입 캐스팅 (Type Casting)

    텐서에도 자료형이 있다. 이 자료형의 변환을 타입 캐스팅이라 한다.
      * FloatTensor, LongTensor, ByteTensor,,,,
      * tensor.float    tensor.long    ,,,

  3. 값 덮어쓰기 (In-place Operation)

    텐서의 연산과 동시에 해당 텐서에 연산의 결과를 덮어쓰기 위해서 x.mul_ 과 같이 _를 뒤에 붙여주면 바로 값이 덮어씌워진다.

 

* 내용의 일부는 해당 글을 참고하였습니다.