-
🎨 나만의 이미지/텍스트 분류 모델 만들기! (TensorFlow & PyTorch 실전 가이드) 🐍🤖인공지능 기초 2025. 4. 26. 14:59반응형
안녕하세요! 오늘은 개발자라면 한 번쯤 꿈꾸는 "나만의 분류 모델"을 직접 만들어보는 여정을 준비했습니다.
이미지와 텍스트, 둘 다 다뤄볼 거예요. TensorFlow와 PyTorch, 두 가지 프레임워크로 실전 예제까지 쭉~ 따라오시면 어느새 딥러닝 마스터가 되어 있을 겁니다! 🚀1. 분류 모델이란? 🤔
분류(Classification)란 입력 데이터를 미리 정의된 여러 클래스 중 하나로 자동 분류하는 작업입니다.
- 이미지 분류: 고양이 vs 강아지, 사과 vs 바나나 🍎🍌
- 텍스트 분류: 긍정 리뷰 vs 부정 리뷰, 뉴스 카테고리 분류 📰
2. 프레임워크 선택: TensorFlow vs PyTorch ⚔️
- TensorFlow: 구글이 만든, 안정적이고 배포에 강한 프레임워크
- PyTorch: 페이스북이 만든, 직관적이고 빠른 개발에 강한 프레임워크
둘 다 강력합니다. 취향 따라 골라보세요!
3. 데이터 전처리: 모델 성능의 80%는 여기서 결정된다! 🧹
📷 이미지 데이터
이미지 읽기 & 크기 조정
# 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)
데이터 증강 (Data Augmentation)
- 좌우 반전, 회전, 확대 등으로 다양한 이미지를 만들어 과적합 방지!
# TensorFlow data_aug = tf.keras.Sequential([ tf.keras.layers.RandomFlip('horizontal'), tf.keras.layers.RandomRotation(0.1) ]) # PyTorch transforms.RandomHorizontalFlip()
- 좌우 반전, 회전, 확대 등으로 다양한 이미지를 만들어 과적합 방지!
📝 텍스트 데이터
토큰화 & 시퀀스 변환
# 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.")
패딩 & 임베딩
- 시퀀스 길이 맞추기, 단어를 벡터로 변환해주기!
# 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
반응형