본문 바로가기
python

pytorch 기초 사용법(텐서 생성, 텐서 연산, 데이터셋 및 데이터 로더)

by 타닥타닥 토다토닥 부부 2023. 4. 15.
반응형

pytorch 기초 사용법 (텐서 생성, 텐서 연산, 데이터셋 및 데이터 로더/Dataset, DataLoader)

 

0. 설명

# PyTorch는 딥러닝 연구 및 개발을 위한 오픈 소스 라이브러리로, Python 기반의 텐서 계산 및 GPU 가속화 지원, 자동 미분 및 최적화를 위한 도구를 제공합니다.

 

1. 설치

pip install torch

혹은 https://pytorch.org/ 참고하세요

 

2. 텐서 생성

  • 0 텐서 생성
zeros_tensor = torch.zeros(3, 3)
  • 1 텐서 생성
ones_tensor = torch.ones(3, 3)
  • 랜덤 탠서 생성
random_tensor = torch.rand(3, 3)
  • 리스트나, 넘파이 어레이 배열 to 텐서
import numpy as np
data = np.array([1, 2, 3])
tensor = torch.tensor(data)

 

3. 텐서 연산

  • 텐서 덧셈
result = tensor1 + tensor2
  • 텐서 곱셈
result = tensor1 * tensor2
  • 행렬 곱셈
result = torch.matmul(tensor1, tensor2)
  • 자동미분
x = torch.tensor(2.0, requires_grad=True)
y = x ** 2
y.backward()  # 미분 계산
x.grad  # dy/dx 값 확인
  • 신경망구성
import torch.nn as nn

class MyNeuralNetwork(nn.Module):
    def __init__(self):
        super(MyNeuralNetwork, self).__init__()
        self.layer1 = nn.Linear(10, 20)
        self.layer2 = nn.ReLU()
        self.layer3 = nn.Linear(20, 5)

    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        return x

model = MyNeuralNetwork()
  • 손실함수와 최적화 알고리즘 선택
loss_function = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
  • 훈련
for epoch in range(100):
    # 예시: 입력 데이터와 정답 레이블
    inputs = torch.randn(32, 10)  # 배치 크기 32, 입력 크기 10
    labels = torch.randint(0, 5, (32,))  # 정답 레이블

    optimizer.zero_grad()  # 기울기 초기화
    outputs = model(inputs)  # 모델의 예측 값 계산
    loss = loss_function(outputs, labels)

 

4. 데이터셋 및 데이터로더

  • 설명
# 데이터셋과 데이터 로더는 학습 및 평가 데이터를 효율적으로 불러오고,
# 학습 데이터를 구분하고 배치 처리를 수행하는 등 데이터 다루는데 필요한 일들에 도움을 줍니다.
  • 라이브러리 이포트
import torch
from torch.utils.data import Dataset, DataLoader
  • 사용자정의 데이터셋 생성
# Dataset 클래스를 상속받아 사용자 정의 데이터셋 클래스를 만들고,
# __getitem__ 및 __len__ 메서드를 구현해야 합니다.

class MyDataset(Dataset):
    def __init__(self, data, labels):
        self.data = data
        self.labels = labels

    def __getitem__(self, index):
        x = self.data[index]
        y = self.labels[index]
        return x, y

    def __len__(self):
        return len(self.data)
  • 데이터 셋 및 데이터 로더 인스턴스 생성
# 임의의 데이터와 레이블
data = torch.randn(100, 3, 32, 32)  # 100개의 3x32x32 이미지
labels = torch.randint(0, 10, (100,))  # 100개의 정답 레이블

# 데이터셋 인스턴스 생성
my_dataset = MyDataset(data, labels)

# 데이터 로더 인스턴스 생성
data_loader = DataLoader(my_dataset, batch_size=10, shuffle=True)
  • 데이터 로더를 사용한 배치 처리
for epoch in range(num_epochs):
    for batch_idx, (inputs, targets) in enumerate(data_loader):
        # 모델 학습 및 평가 코드 아래 입력

 

반응형

댓글