(파이토치 딥러닝 마스터) Chapter 3. Tensor Structure

2장에서는 기본 컨텐츠 대신 실제 모델을 사용하여 이미지 분류나 생성에 적용해 보았습니다. 3장에서는 기본으로 돌아가 PyTorch의 기본 데이터 구조인 Tensor의 개념과 동작 과정에 대해 알아본다.

딥러닝 과정은 이미지, 텍스트, 음성 등의 데이터를 다른 데이터로 변환하는 과정을 거친다. 이 과정에서 텐서는 필수적입니다. 이제 텐서에 대해 자세히 알아보겠습니다.

3장에서 다룰 내용

  • PyTorch의 기본 데이터 구조인 Tensor 이해
  • 인덱스 및 연산으로 텐서에 액세스
  • 다차원 배열로 작업하기 numpy
  • 향상된 성능을 위한 GPU 컴퓨팅 처리

3.1 부동 소수점 숫자의 세계
& 3.2 텐서: 다차원 배열

텐서란 무엇입니까?


  • 데이터 처리 및 저장을 위해 PyTorch에서 제공하는 기본 데이터 구조인 딥 러닝의 텐서는 모든 차원의 벡터 또는 행렬의 일반화된 개념입니다.
  • 다차원 배열이라고도 하는 텐서의 차원 수는 텐서 내 스칼라 값을 참조하는 데 사용되는 인덱스 수와 같습니다.
  • 데이터 과학의 표준인 Numpy는 현재까지 가장 널리 사용되는 다차원 배열 라이브러리입니다.
  • Python 목록은 Python 프로그램에서 2차원 선의 좌표와 같은 숫자 벡터를 조작하는 데 사용할 수도 있습니다. 텐서 데이터 구조를 사용하여 이미지 및 시계열 데이터 또는 명령어를 정의할 때, 훨씬 더 효율적이고 직관적으로 데이터를 조각내고 조작할 수 있습니다.
t = torch.FloatTensor(((1., 2., 3.),
                       (4., 5., 6.),
                       (7., 8., 9.),
                       (10., 11., 12.)
                      ))
print

print(t.dim())  # 차원 수
print(t.size()) # shape과 동일

3.3 텐서 인덱싱

3.5 텐서 요소 유형

  1. 파이썬에서 숫자는 객체입니다.
    • 부동 소수점 숫자는 컴퓨터에서 32비트 공간을 사용합니다. 그러나 Python은 부동 소수점 숫자를 완전한 Python 객체로 변환하기 위해 참조 횟수도 생성합니다. 박싱 작업은 많은 양의 데이터를 처리할 때 비효율적입니다.
  2. Python의 목록은 관련 객체 모음입니다.
    • Python에는 두 벡터의 내적을 효율적으로 수행하는 작업이 없습니다. 벡터 합에도 동일하게 적용됩니다. 메모리 최적화 방법이 없으며 Python의 기본 데이터 구조는 상당히 비효율적입니다.
  3. Python 인터프리터는 최적화를 거치는 컴파일된 코드보다 느립니다.
    • 수학 연산에 관해서는 C와 같은 저수준 언어보다 훨씬 느립니다.

이러한 이유로 데이터 과학 계산이나 신경망 계산을 수행할 때 표준 Python 데이터 구조 대신 NumPy 또는 Tensor와 같은 데이터 구조가 사용됩니다.

dtype 유형

  • Torch.Float32 또는 Torch.Float : 32비트 단정밀도 부동 소수점 숫자
  • Torch.Float64 또는 Torch.Double : 64비트 배정밀도 부동 소수점
  • Torch.float16 또는 Torch.Half : 16비트 반정밀도 부동 소수점
  • Torch.int8 : 8비트 부호 있는 정수
  • Torch.uint8 : 8비트 부호 없는 정수
  • Torch.int16 또는 Torch.Short : 16비트 부호 있는 정수
  • Torch.int32 또는 Torch.int : 32비트 부호 있는 정수
  • Torch.int64 또는 Torch.long : 64비트 부호 있는 정수
  • flashlight.bool : 부울
lt = torch.LongTensor((1, 2, 3, 4))
print(lt)
print(lt.float())
bt = torch.ByteTensor((True, False, False, True))
print(bt)

print(bt.long())

print(bt.float())