ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🎨 나만의 이미지/텍스트 분류 모델 만들기! (TensorFlow & PyTorch 실전 가이드) 🐍🤖
    인공지능 기초 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

    반응형
Designed by Tistory.