Python/Python 심화

Python TensorFlow와 PyTorch를 이용한 딥러닝

임베디드 친구 2025. 8. 21. 19:52
728x90
반응형

Python TensorFlow와 PyTorch를 이용한 딥러닝

딥러닝은 오늘날 AI 기술의 중심에 서 있는 강력한 도구입니다. Python은 TensorFlow와 PyTorch와 같은 딥러닝 프레임워크를 통해 연구와 개발의 표준으로 자리 잡았습니다. 이번 포스팅에서는 TensorFlow와 PyTorch를 사용하여 딥러닝 모델을 구축하는 과정을 설명하고 간단한 예제를 통해 이해를 돕고자 합니다.

1. TensorFlow와 PyTorch 개요

TensorFlow

TensorFlow는 Google이 개발한 오픈소스 딥러닝 프레임워크로, 대규모 데이터 처리를 위한 다양한 도구와 최적화를 지원합니다. TensorFlow는 특히 산업용 애플리케이션에서 널리 사용되며, Keras API를 통해 직관적인 모델 정의가 가능합니다.

PyTorch

PyTorch는 Facebook이 개발한 딥러닝 프레임워크로, 동적 계산 그래프(dynamic computation graph)를 지원합니다. PyTorch는 학계와 연구자들 사이에서 특히 인기가 많으며, Pythonic한 인터페이스로 인해 배우고 사용하기 쉽습니다.


2. TensorFlow를 이용한 딥러닝 모델 예제

아래는 TensorFlow를 사용하여 간단한 신경망을 구축하고 훈련하는 예제입니다. MNIST 데이터셋을 사용하여 손글씨 숫자를 분류합니다.

코드 예제

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# 데이터 로드 및 전처리
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape((x_train.shape[0], 28, 28, 1)).astype('float32') / 255
x_test = x_test.reshape((x_test.shape[0], 28, 28, 1)).astype('float32') / 255
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# 모델 정의
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

# 모델 컴파일
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 모델 훈련
model.fit(x_train, y_train, epochs=5, batch_size=64, validation_split=0.2)

# 모델 평가
loss, accuracy = model.evaluate(x_test, y_test)
print(f"테스트 손실: {loss}, 테스트 정확도: {accuracy}")

위 코드에서는 TensorFlow를 사용하여 CNN 모델을 정의하고 MNIST 데이터셋으로 훈련과 평가를 수행했습니다.


3. PyTorch를 이용한 딥러닝 모델 예제

이번에는 PyTorch를 사용하여 동일한 작업을 수행합니다. PyTorch의 기본 구조와 동작 방식을 살펴보겠습니다.

코드 예제

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 데이터 로드 및 전처리
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

# 모델 정의
class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, activation='relu')
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, activation='relu')
        self.fc1 = nn.Linear(64 * 6 * 6, 64)
        self.fc2 = nn.Linear(64, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 64 * 6 * 6)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = SimpleCNN()

# 손실 함수와 최적화기 정의
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 모델 훈련
for epoch in range(5):
    model.train()
    for images, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

# 모델 평가
model.eval()
correct = 0
with torch.no_grad():
    for images, labels in test_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs, 1)
        correct += (predicted == labels).sum().item()

accuracy = correct / len(test_loader.dataset)
print(f"테스트 정확도: {accuracy}")

PyTorch는 동적 계산 그래프 덕분에 더 많은 유연성을 제공합니다. 위 코드는 CNN을 정의하고 MNIST 데이터셋을 사용하여 훈련 및 평가하는 과정을 보여줍니다.


4. TensorFlow와 PyTorch 비교

특징 TensorFlow PyTorch
학습 곡선 상대적으로 가파름 직관적이고 Pythonic
계산 그래프 정적 계산 그래프 동적 계산 그래프
주요 사용 사례 산업용 대규모 애플리케이션 연구와 학계
디버깅 tf.debugging 도구 Python 디버깅 도구 사용 가능

5. 마무리

TensorFlow와 PyTorch는 각각의 장단점을 가진 강력한 딥러닝 프레임워크입니다. 프로젝트의 요구사항과 개인 선호도에 따라 적합한 도구를 선택하면 됩니다. 두 프레임워크 모두 딥러닝 개발에 필요한 광범위한 기능을 제공하며, 이를 통해 혁신적인 AI 솔루션을 구축할 수 있습니다.

728x90
반응형