PyTorch 기본

Cammie·2022년 10월 2일
0

PyTorch

목록 보기
1/4
post-thumbnail

Tensor

numpy에 ndarray가 있다면, PyTorch에는 Tensor가 있다.

이 외에도 대부분의 numpy에서 사용법과 비슷하게 pytorch에서 적용된다.


torch.tensor vs torch.Tensor

torch.Tensor

  • 클래스 (Class)
  • int 입력시 float로 변환
  • torch 데이터 입력시 입력 받은 데이터의 메모리 공간을 그대로 사용 (얕은 복사; shallow copy와 비슷)
  • list, numpy 데이터 입력 시 입력 받은 데이터를 복사하여 생성 (깊은복사; deep copy와 비슷)

torch.tensor

  • 함수 (Function)
  • 항상 data를 복사
  • int 입력시 int 그대로 입력
  • 입력 받은 데이터를 새로운 메모리 공간으로 복사하여 생성

차원

CV분야에서의 3D Tensor의 경우에는 (배치 사이즈, 이미지의 높이, 이미지의 너비)를 의미한다.

이미지가 흑백인 경우에는 이러한 3D Tensor로 가능하지만, 컬러인 경우에는 Channel 차원이 추가되어 (배치 사이즈, 채널의 수, 이미지의 높이, 이미지의 너비)인 4D Tensor로 사용된다.
* 이때 컬러의 채널 수는 R, G, B로 3이다. 즉, (배치 사이즈, 3, 이미지의 높이, 이미지의 너비)로 사용된다.


unsqeeze()와 sqeeze()

sqeeze

  • 차원이 1인 차원을 제거
  • 따로 차원을 설정하지 않으면 1인 차원을 모두 제거
  • dim 지정 선택

unsqeeze

  • 1인 차원을 생성
  • 어느 차원에 1인 차원을 생성할 지 지정
  • dim 지정 필수

view VS reshape

  • tensor의 shape을 바꾸는데 사용
  • view는 copy를 하여 데이터값들을 가져온 것이 아닌, 데이터의 shape만 다르게 보이도록 해주는 것. (view 이후에 기존 데이터 값을 변경하면, view가 적용된 데이터 값도 변경됨)

cat VS stack

  • cat은 주어진 차원을 기준으로 주어진 텐서들을 붙임 (차원이 깊어지고, 차원의 수는 유지)
  • stack은 새로운 차원으로 주어진 텐서들을 붙임 (차원이 확장되고, 기존 차원들의 깊이는 유지)
  • e.g. (3, 4)의 shape을 갖는 2개의 텐서 A와 B를 붙이는 경우, torch.cat([A, B], dim=0)의 결과는 (6, 4)의 shape을 갖고, torch.stack([A, B], dim=0)의 결과는 (2, 3, 4)의 shape을 갖는다.

dot VS mm VS matmul

  • dot은 벡터의 내적연산
  • mm은 행렬 곱 연산 (matmul도 동일)
  • mm과 다르게 matmul은 자동 broadcasting 지원하여 계산
    * 어떤 조건을 만족했을 때 연산이 가능해지도록 배열을 자동 변환



참고 사이트
https://stackoverflow.com/questions/54307225/whats-the-difference-between-torch-stack-and-torch-cat


0개의 댓글