인공지능 기초

🎨 나만의 이미지/텍스트 분류 모델 만들기! (TensorFlow & PyTorch 실전 가이드) 🐍🤖

weblogic 2025. 4. 26. 14:59
반응형

안녕하세요! 오늘은 개발자라면 한 번쯤 꿈꾸는 "나만의 분류 모델"을 직접 만들어보는 여정을 준비했습니다.
이미지와 텍스트, 둘 다 다뤄볼 거예요. TensorFlow와 PyTorch, 두 가지 프레임워크로 실전 예제까지 쭉~ 따라오시면 어느새 딥러닝 마스터가 되어 있을 겁니다! 🚀


1. 분류 모델이란? 🤔

분류(Classification)란 입력 데이터를 미리 정의된 여러 클래스 중 하나로 자동 분류하는 작업입니다.

  • 이미지 분류: 고양이 vs 강아지, 사과 vs 바나나 🍎🍌
  • 텍스트 분류: 긍정 리뷰 vs 부정 리뷰, 뉴스 카테고리 분류 📰

2. 프레임워크 선택: TensorFlow vs PyTorch ⚔️

  • TensorFlow: 구글이 만든, 안정적이고 배포에 강한 프레임워크
  • PyTorch: 페이스북이 만든, 직관적이고 빠른 개발에 강한 프레임워크

둘 다 강력합니다. 취향 따라 골라보세요!


3. 데이터 전처리: 모델 성능의 80%는 여기서 결정된다! 🧹

📷 이미지 데이터

  1. 이미지 읽기 & 크기 조정

     # TensorFlow
     img = tf.keras.preprocessing.image.load_img('cat.jpg', target_size=(224, 224))
     img = tf.keras.preprocessing.image.img_to_array(img) / 255.0
    
     # PyTorch
     from PIL import Image
     import torchvision.transforms as transforms
     img = Image.open('cat.jpg')
     transform = transforms.Compose([
         transforms.Resize((224, 224)),
         transforms.ToTensor()
     ])
     img_tensor = transform(img)
  2. 데이터 증강 (Data Augmentation)

    • 좌우 반전, 회전, 확대 등으로 다양한 이미지를 만들어 과적합 방지!
      # TensorFlow
      data_aug = tf.keras.Sequential([
        tf.keras.layers.RandomFlip('horizontal'),
        tf.keras.layers.RandomRotation(0.1)
      ])
      # PyTorch
      transforms.RandomHorizontalFlip()

📝 텍스트 데이터

  1. 토큰화 & 시퀀스 변환

     # TensorFlow
     from tensorflow.keras.preprocessing.text import Tokenizer
     tokenizer = Tokenizer(num_words=10000)
     tokenizer.fit_on_texts(texts)
     sequences = tokenizer.texts_to_sequences(texts)
    
     # PyTorch
     from torchtext.data.utils import get_tokenizer
     tokenizer = get_tokenizer("basic_english")
     tokens = tokenizer("This is a sentence.")
  2. 패딩 & 임베딩

    • 시퀀스 길이 맞추기, 단어를 벡터로 변환해주기!
      # TensorFlow
      from tensorflow.keras.preprocessing.sequence import pad_sequences
      padded = pad_sequences(sequences, maxlen=100)
      # 임베딩 레이어
      tf.keras.layers.Embedding(input_dim=10000, output_dim=128)

4. 모델 설계: 나만의 아키텍처 만들기 🏗️

이미지 분류 (CNN)

# TensorFlow 예시
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(224,224,3)),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(num_classes, activation='softmax')
])
  • 전이학습(Transfer Learning): 미리 학습된 모델(ResNet, MobileNet 등)을 활용하면 더 빠르고 정확하게!
  • PyTorch에서도 미리 학습된 모델을 불러와서 model.fc만 바꿔주면 OK!

텍스트 분류 (LSTM, Transformer)

# TensorFlow LSTM 예시
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(10000, 128, input_length=100),
    tf.keras.layers.LSTM(128),
    tf.keras.layers.Dense(num_classes, activation='softmax')
])
  • 최신 NLP는 BERT 같은 Transformer 기반 모델이 대세!
  • Huggingface Transformers 라이브러리로 손쉽게 구현 가능!

5. 모델 학습: 훈련은 진지하게, 과적합은 방지! 🏋️‍♂️

  • 손실 함수: categorical_crossentropy(다중 클래스), binary_crossentropy(이진)
  • 옵티마이저: adam이 기본
  • 과적합 방지: 드롭아웃, 데이터 증강, EarlyStopping, 정규화 등
# TensorFlow
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
history = model.fit(train_data, epochs=10, validation_data=val_data, callbacks=[...])

6. 모델 평가: 내 모델은 얼마나 똑똑할까? 📊

  • 정확도(Accuracy), 혼동 행렬(Confusion Matrix), 정밀도/재현율/F1-score 등 다양한 지표로 평가!
  • 시각화도 잊지 마세요.
      import matplotlib.pyplot as plt
      plt.plot(history.history['accuracy'])
      plt.plot(history.history['val_accuracy'])
      plt.legend(['Train', 'Val'])
      plt.title('Accuracy')
      plt.show()

7. 실전 예제: 고양이/개 이미지 분류기 만들기 🐱🐶

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_gen = ImageDataGenerator(rescale=1./255, horizontal_flip=True)
train_data = train_gen.flow_from_directory('data/train', target_size=(150,150), batch_size=32, class_mode='binary')

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150,150,3)),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(train_data, epochs=10)

8. 실전 예제: PyTorch로 영화 리뷰 감정 분석기 만들기 🎬

import torch
import torch.nn as nn
import torch.optim as optim
# ... (데이터 준비는 앞서 설명한 방식과 동일)
class LSTMModel(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_dim, output_dim):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.lstm = nn.LSTM(embed_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)
    def forward(self, x):
        x = self.embedding(x)
        _, (hidden, _) = self.lstm(x)
        return self.fc(hidden[-1])

model = LSTMModel(vocab_size, 128, 256, 2)
optimizer = optim.Adam(model.parameters())
criterion = nn.CrossEntropyLoss()
# ... (학습 루프)

9. 마무리 & 더 나아가기 🌱

  • 하이퍼파라미터 튜닝, 앙상블, 모델 경량화, 멀티모달(이미지+텍스트) 등
  • 최신 논문과 오픈소스 프로젝트도 꾸준히 탐구해보세요!

참고 자료 📚


여러분만의 데이터로, 여러분만의 모델을 만들어보세요!
코드 한 줄, 실험 하나가 세상을 바꿀 수도 있습니다.
궁금한 점은 댓글로 남겨주세요! 😄


#딥러닝 #머신러닝 #이미지분류 #텍스트분류 #분류모델 #TensorFlow #PyTorch #CNN #LSTM #Transformer #전이학습 #데이터전처리 #데이터증강 #자연어처리 #컴퓨터비전 #데이터사이언스 #AI #모델학습 #모델평가 #실전코딩 #개발자팁 #튜토리얼 #Python

반응형