카테고리 없음

텐서

멍주다배 2025. 2. 6.

텐서(Tensor)

  • 딥러닝과 머신러닝에서 데이터를 표현하는 기본 단위
  • 예) 이미지 데이터 (4D 텐서), 자연어 처리(3D 텐서), RNN 상태 정보(2D 텐서)

 

차원

  • 차원에 따라 다른 명칭을 가짐 (랭크로 표현)
스칼라: 단순 숫자
- 예) 4, 3.14
scalar = torch.tensor(4)

print(scalar)
print(scalar.dim())
print(scalar.item())

# 결과
# tensor(4)
# 0
# 4​

벡터: 1차원 텐서 (리스트)
- 크기와 방향이 있음
- 하나의 축으로 이뤄져있음
- 예) [2, 4, 6]

행렬: 2차원 텐서 (중첩 리스트)
- 예) [[1, 2], [3, 4]]
matrix = torch.tensor([[1, 2], [3, 4]])

print(matrix)
print(matrix.dim())
print(matrix.shape)

# 결과
# tensor([[1, 2],
#          [3, 4]])
# 2
# torch.Size([2, 2])


고차원: 다차원 배열 (3차원, 4차원, ...)
- " [ "의 개수로 차원 수 확인
- 예) [[[1,2], [3,4]], [[5,6], [7,8]]]

 

연산

다양한 연산(행렬 곱, 전치, 변형 등)을 수행

  ※ 딥러닝에서 GPU 쓰는 이유: 행렬 연산을 계산하기 위해, 속도도 빠름  

  • NumPy: numpy.array()
  • TensorFlow: tf.Tensor()
    • torch.tensor(['1']) -> torch = 데이터를 저장하는 상자
  • PyTorch: torch.tensor()

 

텐서 ↔ 넘파이 변환

  • .numpy() 사용 → NumPy 배열로 변환
    • tensor.numpy() 로 변환된 배열은 PyTorch 텐서와 메모리를 공유함
    • 텐서의 값을 변경하면 NumPy 배열 값도 함께 바뀜
  • torch.from_numpy() 사용 → PyTorch 텐서로 변환
    • torch.from_numpy() 로 변환된 텐서는 NumPy 배열과 메모리를 공유함
    • NumPy 배열을 변경하면 텐서 값도 바뀜
  • 독립적 변환 방법
    • tensor.clone().detach().numpy() → NumPy 배열로 변환
    • torch.tensor(numpy_array) → PyTorch 텐서로 변환

 

텐서 - 랜덤 함수 적용

넘파이와 같음

# 0과 1사이의 수
# 랜덤 수 - 균등
random_tensor = torch.rand(3, 4)
random_tensor

# 랜덤 수 - 정규분포
random_normal_tensor = torch.randn(3, 4)
print(random_normal_tensor)


# 0으로만 이루어진 배열
zeros_tensor = torch.zeros(3, 4)
zeros_tensor

# 1로만 이루어진 배열
ones_tensor = torch.ones(3, 4)
ones_tensor

# 원하는 수로만 이루어진 배열
filled_tensor = torch.full((3, 4), 7)	# 배열 크기, 원하는 수
filled_tensor

 

NumPy vs Tensor

NumPy 

  • Python에서 행렬 연산 및 수학적 계산을 빠르게 수행하는 라이브러리
  • 배열(ndarray)을 사용해 데이터 저장 및 연산 수행
  • 수학 및 선형대수 연산 지원
  • 일반적인 수학 연산, 데이터 분석, 머신러닝 모델 학습 전 데이터 처리
  • CPU 연산만 가능

Tensor

  • NumPy의 배열과 유사한 구조지만 딥러닝을 위한 최적화된 기능 제공
    • 딥러닝 학습에 필요한 GPU, 역전파 지원
      • GPU 가속 지원 (딥러닝 모델 학습 속도 향상)
      • 자동 미분(autograd)을 지원해 역전파를 쉽게 구현 가능
  • NumPy와 호환 가능 (.numpy(), torch.from_numpy())