PyTorch에서 torch.tensor와 torch.Tensor의 차이점
PyTorch에서 torch.tensor와 torch.Tensor의 차이점
개념
- torch.Tensor:
- PyTorch에서 다차원 배열을 표현하는 기본 데이터 구조
- 속성: 크기, 자료형, 장치 (CPU 또는 GPU)
- 연산: 덧셈, 곱셈, 행렬 곱셈 등
- torch.tensor:
- Python 리스트, NumPy 배열, 튜플 등을 torch.Tensor 객체로 변환하는 함수
- 입력 데이터의 크기, 자료형, 장치를 지정할 수 있음
주요 차이점
구분 | torch.Tensor | torch.tensor |
---|---|---|
역할 | 데이터 구조 | 함수 |
기능 | 다차원 배열 표현 | Python 데이터 -> torch.Tensor 변환 |
입력 | - | 리스트, NumPy 배열, 튜플 등 |
출력 | torch.Tensor 객체 | torch.Tensor 객체 |
사용 예시
# 1. torch.Tensor 객체 생성
tensor1 = torch.Tensor([1, 2, 3])
tensor2 = torch.zeros(3, 3)
# 2. torch.tensor 함수 사용
tensor3 = torch.tensor([1, 2, 3], dtype=torch.float)
tensor4 = torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
# 3. 두 객체의 동일성 확인
print(tensor1 == tensor3) # False
print(tensor1.dtype == tensor3.dtype) # True
# 4. 연산
tensor1 + tensor3 # 덧셈 연산
tensor2 * tensor4 # 곱셈 연산
주의 사항
- torch.tensor 함수는 입력 데이터를 torch.Tensor 객체로 변환복사합니다.
- 기존 데이터를 변경하려면 변환 후 직접 수정해야 합니다.
결론
- torch.Tensor는 PyTorch에서 다차원 배열을 표현하는 기본 데이터 구조입니다.
- 두 개념은 서로 밀접하게 연관되어 있지만, 역할과 기능에 있어 명확한 차이점을 가지고 있습니다.
PyTorch에서 torch.tensor와 torch.Tensor의 차이점을 보여주는 예제 코드
# 1. torch.Tensor 객체 생성
# 빈 텐서 생성
tensor1 = torch.Tensor()
print(tensor1) # torch.Tensor([])
# 숫자로 채워진 텐서 생성
tensor2 = torch.Tensor([1, 2, 3])
print(tensor2) # tensor([1, 2, 3])
# 3x3 크기의 0으로 채워진 텐서 생성
tensor3 = torch.zeros(3, 3)
print(tensor3) # tensor([[0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.]])
# 2. torch.tensor 함수 사용
# 리스트를 텐서로 변환
tensor4 = torch.tensor([1, 2, 3], dtype=torch.float)
print(tensor4) # tensor([1., 2., 3.], dtype=torch.float)
# NumPy 배열을 텐서로 변환
import numpy as np
tensor5 = torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
print(tensor5) # tensor([[1, 2, 3],
# [4, 5, 6]])
# 3. 두 객체의 동일성 확인
print(tensor2 == tensor4) # False
print(tensor2.dtype == tensor4.dtype) # True
# 4. 연산
# 덧셈 연산
tensor6 = tensor2 + tensor4
print(tensor6) # tensor([2., 4., 6.], dtype=torch.float)
# 곱셈 연산
tensor7 = tensor3 * tensor5
print(tensor7) # tensor([[0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.]])
- 1번 코드 블록은 torch.Tensor 객체를 직접 생성하는 방법을 보여줍니다.
- 2번 코드 블록은 torch.tensor 함수를 사용하여 다양한 Python 데이터 구조를 torch.Tensor 객체로 변환하는 방법을 보여줍니다.
- 3번 코드 블록은 두 torch.Tensor 객체의 동일성과 자료형을 비교합니다.
PyTorch에서 torch.tensor 대체 방법
직접 생성
- torch.Tensor 객체를 직접 생성하는 방법은 크기, 자료형, 장치 등을 명확하게 제어할 수 있어 유연합니다.
- 예시:
# 3x3 크기의 0으로 채워진 텐서 생성
tensor1 = torch.zeros(3, 3)
# 10개의 임의 숫자로 채워진 텐서 생성
tensor2 = torch.randn(10)
# CPU에 있는 3x3 크기의 float32 텐서 생성
tensor3 = torch.empty(3, 3, dtype=torch.float32, device=torch.device("cpu"))
NumPy 배열 사용
- NumPy는 Python에서 다차원 배열을 다루는 강력한 라이브러리입니다.
- NumPy 배열을 torch.Tensor 객체로 변환하는 것은 간편하고 효율적입니다.
import numpy as np
# NumPy 배열 생성
np_array = np.array([[1, 2, 3], [4, 5, 6]])
# NumPy 배열을 텐서로 변환
tensor4 = torch.from_numpy(np_array)
# 텐서를 NumPy 배열로 변환
np_array2 = tensor4.numpy()
타사 라이브러리 사용
onn
라이브러리는 NumPy와 유사한 API를 제공하며, ONNX 모델과 호환되는 텐서 생성을 지원합니다.
from onnx import numpy_helper
# ONNX 모델과 호환되는 텐서 생성
tensor5 = numpy_helper.from_array(np.array([[1, 2, 3], [4, 5, 6]]))
사용자 정의 함수
- 특정한 상황에 맞는 맞춤형 텐서 생성 함수를 정의할 수 있습니다.
def my_tensor_func(n):
"""
n 크기의 랜덤 텐서 생성
"""
return torch.randn(n)
# 사용자 정의 함수 사용
tensor6 = my_tensor_func(10)
선택 가이드
- 직접 생성: 최대의 유연성이 필요할 때
- NumPy 배열: 간편하고 효율적인 텐서 변환
- 타사 라이브러리: 특정 기능 또는 호환성 필요
- 사용자 정의 함수: 맞춤형 텐서 생성
주의 사항
- torch.tensor 함수는 입력 데이터를 복사합니다.
python pytorch