머신러닝 스터디#2

딥러닝 프로젝트를 시작할 때 알아야 할 기본적인 준비 사항들

Author: Han Damin
Tags: deep learning AI basics
Published: 2025/01/06 14:00 Series: 머신러닝 스터디

딥러닝 프로젝트를 시작하려면 어떤 준비가 필요할까? 이번에는 딥러닝 프로젝트를 처음 시작하는 분들을 위해, 꼭 알아야 할 기본적인 내용들을 살펴보려고 한다.



데이터의 중요성

딥러닝에서 가장 중요한 것은 바로 데이터다. 아무리 좋은 모델이라도 데이터가 부실하면 좋은 결과를 얻을 수 없다.

1. 데이터 수집

데이터 수집 시 고려해야 할 점들:

  • 충분한 양: 너무 적은 데이터로는 학습이 어렵다
  • 다양성: 한쪽으로 치우친 데이터는 좋지 않다
  • 품질: 잘못된 데이터는 오히려 해가 된다

데이터 수집 시 고려해야 할 점들

출처: AWS-최신 데이터 중심 아키텍처 사용 사례 설계 및 구현 모범 사례

# 이미지 데이터셋 만들기 예시
train_data = datasets.ImageFolder(
    root='./train_images',
    transform=transforms.ToTensor()
)

print(f"수집된 데이터 개수: {len(train_data)}")

2. 데이터 전처리

데이터를 분석하거나 학습하기 전에 반드시 데이터의 품질을 확인하고 전처리를 해야 한다.

데이터 전처리

출처: 모두의연구소 - 데이터 전처리의 중요성

  1. 크기 맞추기: 이미지의 경우
transform = transforms.Compose([
    transforms.Resize((224, 224)),  # 모든 이미지를 같은 크기로
    transforms.ToTensor()           # 텐서로 변환
])
  1. 정규화: 숫자 데이터의 경우
# 데이터를 0~1 사이 값으로 변환
normalized_data = (data - data.min()) / (data.max() - data.min())

3. 간단한 모델 만들기

처음부터 복잡한 모델을 만들 필요는 없다. 가장 기본적인 모델부터 시작해보자.

1. 기본 신경망 구조

class SimpleNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.layer1 = nn.Linear(784, 128)   # 첫 번째 층
        self.layer2 = nn.Linear(128, 10)    # 출력층

    def forward(self, x):
        x = self.flatten(x)
        x = F.relu(self.layer1(x))
        x = self.layer2(x)
        return x

처음에는 층을 2-3개만 사용하는 것이 좋다. 너무 깊게 만들면 학습도 어렵고 문제 파악도 힘들다.


2. 학습 과정 이해하기

학습은 다음과 같은 단계로 이루어진다:

  1. 데이터 준비:
train_loader = DataLoader(train_data, batch_size=32, shuffle=True)
  1. 학습 실행:
for epoch in range(5):    # 5번 반복
    for images, labels in train_loader:
        outputs = model(images)         # 예측
        loss = criterion(outputs, labels)  # 오차 계산
        optimizer.zero_grad()           # 기울기 초기화
        loss.backward()                 # 역전파
        optimizer.step()                # 가중치 업데이트

마치며

이번에는 딥러닝 프로젝트를 시작할 때 꼭 알아야 할 기본적인 내용들을 살펴보았다. 처음에는 복잡해 보일 수 있지만, 하나씩 차근차근 해보면 생각보다 어렵지 않다. 다음 글에서는 실제 프로젝트에서 마주치는 문제들과 이를 해결하는 방법에 대해 더 자세히 다뤄보도록 하겠다.