ProgramingLagnuage/Python

[중급] tensor라는 데이터 구조

TSpoons 2025. 2. 13. 21:28

AI 공부를 하다보면 자유 사용되는 텐서는 데이터 흐름을 표현하고, 딥러닝 모델의 학습 과정에서 데이터를 주고받는 데 사용한다.

자세하게 텐서를 알아보자.

텐서란?

텐서는 다차원 배열을 표현하는 데이터 구조

차원에 따라 다음과 같이 분류:

  • 스칼라 (Rank 0의 텐서): 단일 숫자
  • 벡터 (Rank 1의 텐서): 숫자의 배열
  • 행렬 (Rank 2 텐서): 숫자의 2차원 배열

  • 텐서 (3차원 이상): 3차원 또는 그 이상의 차원을 가진 배열

텐서의 특징

  1. 크기(Shape):
    • 각 차원의 요소 수를 나타내는 튜플
    • 예: (224, 224, 3) - 224×224 크기의 channel이 3인 RGB 이미지
  2. 차원(Dimension):
    • 텐서의 축(axis) 또는 방향의 수
      • 시퀀스는 텍스트에서는 (시간x문자)
      • 이미지는 보통 3차원 텐서 (높이 × 너비 × 채널)
      • 동영상은 (프레임 x 높이 x 너비 x 채널)
  3. 데이터 타입:
    • float32, int64 등 다양한 데이터 타입 지원
    • 메모리 효율성과 연산 속도에 영향

torch.tensor 함수

텐서 생성

torch.arange(0,10)
torch.zeros(2,3)
torch.rand(2,3)

텐서 연산

# 1차원 텐서

a = torch.tensor([1,2,3])
b = torch.tensor([4,5,6])

# 2차원 텐서

c = torch.tensor([[2,3,5],
                 [7,1,4]])

# 벡터-스칼라 연산
print(a+3)
# 벡터-벡터 연산
print(a+b)
# 행렬-스칼라 연산
print(c+2)
# 행렬-벡터 연산 : 브로드캐스트(c의 각 행에 a 행에 대응하는 요소 연산산)
print(c+a)
# 행렬-행렬 연산
print(c+c)

텐서 변환


a = torch.tensor([0,1,2,3,4,5,6,7,8,9])
b = a.view(2,5)
c = a.view(2,-1) # 자동으로 요소 수 계산
d = c.view(-1) # 1차원으로 다시 변환

y = torch.arange(0,8).view(1,2,4)
z = y.squeeze() # 요소 수가 1인 차원 삭제

print(b, b.shape)
print(c, c.shape)
print(d, d.shape)
print(y, y.shape)
print(z, z.shape)

 

 

 


텐서와 Numpy 배열 그리고 리스트

  • list는 일반적인 데이터를 저장하고 처리할 때 유용하지만, 수학적 연산과 고성능 계산에는 적합하지 않음
  • numpy.array은 리스트보다 고성능 수학 연산을 지원하지만, GPU 가속과 자동 미분 기능이 부족
  • torch.tensor는 Numpy 배열의 장점을 기반으로 GPU 가속과 자동 미분 기능까지 제공하여 딥러닝에 최적화된 데이터 구조

텐서 연산의 장점

  • 병렬 처리: GPU에서 병렬 연산을 통한 빠른 연산 가능
  • 메모리 효율성: 최적화된 메모리 사용
  • 자동 미분: 딥러닝의 역전파에 필요한 기울기 계산 자동화

참고 자료