Allen's 데이터 맛집
PyTorch Tensor : 데이터 분석을 위한 심층 학습 기초 본문
데이터 분석에서 중요한 역할을 하는 PyTorch의 텐서(Tensor)에 대해 깊이 있게 알아보겠습니다. 텐서는 PyTorch에서 데이터를 표현하고 처리하는 기본 단위로, 딥러닝 모델을 구축하고 학습하는 데 필수적인 요소입니다.
이미지출처:https://medium.com/@anoorasfatima/10-most-common-maths-operation-with-pytorchs-tensor-70a491d8cafd
텐서란 무엇인가요?
텐서는 다차원 배열을 의미합니다. 이는 NumPy의 ndarray와 유사하지만, GPU를 활용한 연산을 지원한다는 점에서 차이가 있습니다. 텐서는 스칼라(0차원), 벡터(1차원), 행렬(2차원) 등 다양한 차원의 데이터를 포함할 수 있습니다.
텐서의 종류
- 스칼라: 단일 값 (예: 3)
- 벡터: 1차원 배열 (예: [1, 2, 3])
- 행렬: 2차원 배열 (예: [[1, 2], [3, 4]])
- 다차원 텐서: 3차원 이상의 배열 (예: [[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
텐서 생성
PyTorch에서는 다양한 방법으로 텐서를 생성할 수 있습니다. 가장 기본적인 방법은 torch.tensor() 함수를 이용하는 것입니다.
import torch
# 스칼라 텐서
scalar_tensor = torch.tensor(3)
print("스칼라 텐서:", scalar_tensor)
# 벡터 텐서
vector_tensor = torch.tensor([1, 2, 3])
print("벡터 텐서:", vector_tensor)
# 행렬 텐서
matrix_tensor = torch.tensor([[1, 2], [3, 4]])
print("행렬 텐서:", matrix_tensor)
# 3차원 텐서
tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("3차원 텐서:", tensor_3d)
텐서의 속성
텐서의 주요 속성으로는 shape, dtype, device가 있습니다.
- shape: 텐서의 크기
- dtype: 텐서의 데이터 타입 (예: float32, int64)
- device: 텐서가 저장된 장치 (예: CPU, GPU)
# 텐서 속성 확인
print("Shape:", tensor_3d.shape)
print("Dtype:", tensor_3d.dtype)
print("Device:", tensor_3d.device)
텐서 조작
텐서 연산
PyTorch는 다양한 텐서 연산을 지원합니다. 기본적인 수학 연산부터 행렬 연산까지 모두 가능하죠.
# 기본적인 수학 연산
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
print("덧셈:", a + b)
print("뺄셈:", a - b)
print("곱셈:", a * b)
print("나눗셈:", a / b)
# 행렬 곱셈
matrix_a = torch.tensor([[1, 2], [3, 4]])
matrix_b = torch.tensor([[5, 6], [7, 8]])
print("행렬 곱셈:", torch.matmul(matrix_a, matrix_b))
텐서 변환
텐서를 다른 형태로 변환하는 것도 매우 중요합니다. PyTorch에서는 다양한 텐서 변환 기능을 제공합니다.
# 텐서 리쉐이프
reshaped_tensor = tensor_3d.view(2, 4)
print("리쉐이프된 텐서:", reshaped_tensor)
# 텐서 타입 변환
float_tensor = tensor_3d.float()
print("Float 타입 텐서:", float_tensor)
# GPU로 텐서 이동
if torch.cuda.is_available():
tensor_3d = tensor_3d.to('cuda')
print("GPU로 이동된 텐서:", tensor_3d)
텐서와 신경망
텐서는 신경망의 입력 데이터로 사용됩니다. PyTorch에서는 텐서를 이용해 모델의 입력 데이터를 설정하고, 학습과 추론을 수행합니다.
간단한 신경망 예제
import torch.nn as nn
import torch.optim as optim
# 간단한 신경망 정의
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(3, 3)
def forward(self, x):
x = self.fc1(x)
return x
# 모델 초기화
model = SimpleNN()
# 손실 함수와 최적화 알고리즘 설정
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 입력 데이터와 레이블
inputs = torch.tensor([[1.0, 2.0, 3.0]])
labels = torch.tensor([[0.0, 0.0, 0.0]])
# 모델 학습
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
print("출력:", outputs)
print("손실:", loss.item())
텐서는 PyTorch에서 데이터를 표현하고 처리하는 기본 단위입니다. 텐서를 잘 이해하고 조작하는 것은 딥러닝 모델을 효과적으로 구축하고 학습하는 데 매우 중요합니다. 이번 글을 통해 텐서의 개념과 다양한 활용 방법을 익혀보세요.