[네부캠] week1 PyTorch

오홍석·2024년 8월 9일
0

네부캠

목록 보기
1/28

학습내용


난수로 채워진 Tensor 생성법

  • torch.rand(shape) : 0 ~ 1 사이의 연속균등분포에서 추출한 난수로 채워진 tensor를 반환한다.
  • torch.randn(shape) : 표준정규분포(mean = 0, std = 1)에서 추출한 난수로 채워진 tensor를 반환한다.

초기화하지 않은 Tensor 생성법

초기화가 이루어지지 않았다는 것은 Tensor의 요소가 특정 값으로 설정되지 않았다는 뜻이다.
그렇기 때문에 Tensor에 할당하는 메모리에 존재하는 임의의 값들로 채워진다.

  • 장점
    • 성능 향상 -> Tensor의 초기값이 필요하지 않을 경우, 불필요한 자원 소모를 줄일 수 있다.
    • 메모리 사용 최적화 -> Tensor의 크기가 클 경우, 불필요한 초기화는 메모리 사용량을 증가시킨다.
  • torch.empty(shape) : 초기화 되지 않은 Tensor를 shape의 크기로 생성하여 반환
  • torch.fill_(num) : 초기화 되지 않은 Tensor를 num값으로 채운다. 메모리주소 변경 X

Numpy 데이터에서 Tensor 생성법

  • torch.from_Numpy(numpy_data) : numpy 데이터로부터 Tensor를 생성하여 반환한다.

    torch.from_Numpy(numpy_data).float() : Numpy로부터 생성된 Tensor는 기본적으로 정수형이므로 실수형으로 타입 캐스팅이 필요하다.


Tensor의 복사

  • test_tensor.clone() : test_tensor를 복사하여 새로운 메모리에 할당한 Tensor를 반환한다. 반환한 Tensor는 기존 Tensor의 계산 그래프에 연결되어있다.
  • test_tensor.detach() : test_tensor를 복사하지만 기존의 Tensor의 계산 그래프에서는 분리되어있다. 원본 Tensor와 메모리 주소를 공유하기 때문에 하나의 값이 변경되면 같이 변경된다.
  • test_tensor.detach().clone() : 원본 Tensor의 계산 그래프와 분리되고 새로운 메모리에 할당된 Tensor를 반환한다. 가장 많이 사용되는 방식이며, detach()를 먼저 하는 것이 clone()을 먼저 하는 것보다 근소하게 빠르다.

Tensor의 모양 변경

  • test_tensor.view(shape) : 기존 Tensor와 메모리 주소를 공유하며, 기존 Tensor의 메타데이터인 stride를 변경하여 반환한다. 하지만 test_tensor의 메모리가 연속적으로 할당된 경우(contiguous 만족) 사용이 가능하다.
  • test_tensor.reshape(shape) : 기본적으로 기존 Tensor의 view를 반환하려하며, contiguous가 만족하지 않아 반환불가시, contiguous한 Tensor로 복사하여 view를 반환한다.
  • 즉, reshape는 안전하게 형태를 바꿔주고, view는 기존 Tensor와 메모리가 공유되어 업데이트에 대한 보장이 이루어진다. 단, continguous하지 않은 경우 에러 발생 가능

Tensor의 차원 교환

  • test_tensor.transpose(dim1, dim2) : test_tensor의 dim1과 dim2 차원을 서로 바꾼 Tensor를 반환
  • test_tensor.permute() : test_tensor의 모든 차원을 입력된 순서대로 재배치한다.

Tensor의 결합

  • torch.cat((b, c), dim=num) : b와 c Tensor를 입력된 차원을 기준으로 연결하여 반환한다.
  • torch.stack((b, c), dim=num) : b와 c Tensor를 입력된 차원으로 새로운 차원을 생성하여 Tensor들을 결합해 반환한다.

Tensor의 확장

  • test_tensor.expand(3, -1, -1) : 확장하고자 하는 차원의 크기가 1이여야지 확장이 가능하다. -1은 기존의 차원 크기를 그대로 유지하겠다는 의미이다. 확장된 Tensor를 반환한다.
  • test_tensor.repeat(3, 4) : Tensor의 일부 차원이 1이여야 한다는 제약이 없다. 그러나 추가 메모리를 할당하기 때문에 expand에 비해서 메모리 효율성이 떨어진다. dim = 0축으로 3번 반복하고, dim = 1축으로 4번 반복한 Tensor를 반환한다.

회고

알고 있던 내용이라고 생각했지만 그 이유와 동작원리에 대해서 생각해보면 제대로 알지 못했던 것이 너무 많았다. 이번 기회를 통해서 확실하게 짚고 넘어가는 계기를 가질 수 있어서 다행이다.

profile
기동코딩

0개의 댓글