텐서(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)을 지원해 역전파를 쉽게 구현 가능
- 딥러닝 학습에 필요한 GPU, 역전파 지원
- NumPy와 호환 가능 (.numpy(), torch.from_numpy())