Allen's 데이터 맛집

PyTorch Tensor : 데이터 분석을 위한 심층 학습 기초 본문

Machine Learning/머신러닝

PyTorch Tensor : 데이터 분석을 위한 심층 학습 기초

Allen93 2024. 7. 1. 12:26
데이터 분석에서 중요한 역할을 하는 PyTorch의 텐서(Tensor)에 대해 깊이 있게 알아보겠습니다. 텐서는 PyTorch에서 데이터를 표현하고 처리하는 기본 단위로, 딥러닝 모델을 구축하고 학습하는 데 필수적인 요소입니다.

 

N-Dimensional Tensor

 

 

이미지출처: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에서 데이터를 표현하고 처리하는 기본 단위입니다. 텐서를 잘 이해하고 조작하는 것은 딥러닝 모델을 효과적으로 구축하고 학습하는 데 매우 중요합니다. 이번 글을 통해 텐서의 개념과 다양한 활용 방법을 익혀보세요.