Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 오류역전파
- Kaggle
- 캐글
- 결정트리
- 바이오인포매틱스
- 생명정보학
- MERS
- SVM
- 바이오파이썬
- RNN
- 생물정보학
- 딥러닝
- 이항분포
- AP Computer Science A
- 파이썬
- AP
- ncbi
- CNN
- 서열정렬
- 인공지능 수학
- BLaST
- bioinformatics
- HMM
- 인공신경망
- COVID
- 인공지능
- Java
- 시그모이드
- 블록체인
- 자바
Archives
- Today
- Total
데이터 과학
패션 MNIST 소스 분석 본문
패션 MNIST 사이트에서 소스를 분석을 해서 CNN 이전에 MLP로 알고리즘을 구현하여 Flattern-> Dense 형식으로 학습을 활용하는 예제를 알아봅시다.
https://www.tensorflow.org/tutorials/keras/classification?hl=ko
기본 분류: 의류 이미지 분류 | TensorFlow Core
기본 분류: 의류 이미지 분류 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 튜토리얼에서는 운동화나 셔츠 같은 옷 이미지를 분류하는 신경망 모델을
www.tensorflow.org
1) 데이터 & 전처리
- 데이터셋: Fashion-MNIST (28×28 흑백, 10클래스, Train 60k / Test 10k). 이 튜토리얼은 MNIST의 대체재로 조금 더 어려운 데이터라 소개합니다.
- 로드 코드:
fashion_mnist = tf.keras.datasets.fashion_mnist → load_data()로 (train_images, train_labels), (test_images, test_labels) 반환. - 스케일링: train_images = train_images / 255.0 (test도 동일). 픽셀을 [0,1] 범위로 정규화합니다.
- 클래스 이름: ['T-shirt/top','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot'].
메모: 본 튜토리얼은 검증 세트 분리 없이 train으로만 학습하고, 최종 성능은 test에서 평가합니다(간단 데모 목적).
2) 모델 아키텍처(MLP, from_logits=True)
위 튜토리얼 모델은 합성곱이 없는 기본 신경망입니다.
Input(28×28) → Flatten(784) → Dense(128, ReLU) → Dense(10) # logits (Softmax는 붙이지 않음; from_logits=True로 컴파일)
정의 코드: Sequential([Flatten, Dense(128,'relu'), Dense(10)])
파라미터 수(정확 계산)
- Flatten: 가중치 없음.
- Dense(784→128): 784×128 + 128(bias) = 100,480
- Dense(128→10): 128×10 + 10 = 1,290
- 총계: 101,770 파라미터.
컴파일 설정
- optimizer='adam'
- loss=SparseCategoricalCrossentropy(from_logits=True)
- metrics=['accuracy']
→ 코드 그대로이며, 마지막 층은 Softmax 없이 logits를 내고, 손실에서 from_logits=True로 처리합니다.
3) 학습 설정
- 훈련 호출: model.fit(train_images, train_labels, epochs=10) (배치 크기는 Keras 기본값).
- 지표 출력: 에포크마다 loss/accuracy가 찍히는 기본 로그. 예시 로그가 튜토리얼에 포함돼 있습니다.
4) 결과(튜토리얼 기준) & 해석
- Train 정확도: 대략 ~0.90 근처(로그 예시 기준 0.9097).
- Test 정확도: 예시 출력 0.8799. 튜토리얼은 Test가 Train보다 낮은 이유를 과대적합으로 간단히 설명합니다.
왜 이런 성능인가?
- Fashion-MNIST는 MNIST보다 난도가 높고(클래스 간 시각적 유사성),
- 합성곱 없이 전역 픽셀을 일렬로 펼친 MLP는 지역 패턴(에지/텍스처)을 학습하기에 불리합니다.
- 따라서 베이스라인으론 괜찮지만, CNN으로 바꾸면 일반적으로 더 높은 정확도를 얻을 수 있습니다(아래 §7 참조).
5) 예측 단계(확률화 및 시각화)
- 확률 변환: 학습된 model(logits)에 Softmax()를 덧붙인 probability_model로 예측 확률을 구합니다.
probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images) - 해설용 시각화 코드: 단일 이미지/여러 이미지에 대해 예측 막대 그래프와 정답·예측 라벨을 함께 그리는 plot_image, plot_value_array 함수를 제공합니다. 튜토리얼에 동일 코드가 포함되어 있습니다.
6) 오류/혼동이 생기는 이유(정성)
- 카테고리 유사성: Pullover/Coat/Shirt, Sandal/Sneaker 등 텍스처·실루엣이 겹치는 샘플에서 혼동이 발생하기 쉽습니다.
- MLP 한계: 지역 구조를 직접적으로 포착하지 못해, 밝기/배경 변화에 덜 강건합니다.
- 데이터 증강 부재: 기본 예제는 증강 없이 정규화만 수행합니다.
7) 간단 개선안(튜토리얼 유지 vs CNN 전환)
(A) 튜토리얼 틀 유지(MLP)에서의 소폭 개선
- Dropout(0.2~0.5)를 Dense 사이에 추가 → 과적합 완화
- label_smoothing=0.05로 CE에 라벨 스무딩 적용
- ReduceLROnPlateau/EarlyStopping 콜백 추가
- 입력을 (28,28,1)로 바꾸고 Conv 레이어 없이라도 BatchNormalization 추가로 수렴 안정화
(B) CNN 전환(권장)
- 구조 예:
Conv2D(32,3,'same')→MaxPool2D → Conv2D(64,3,'same')→MaxPool2D → Flatten → Dropout(0.25) → Dense(128) → Dense(10 logits) - 기대 효과: 지역 패턴을 직접 학습해 Fashion-MNIST에서도 ~90%대 초·중반 이상으로 올라가는 경우가 일반적(학습 스킴/증강에 따라 상회 가능).
8) 재현 체크리스트
- 전처리: 꼭 x/255.0 동일 적용(Train/Test 모두)
- 모델 정의: Flatten→Dense(128 ReLU)→Dense(10) 정확히 일치 확인
- 컴파일: SparseCategoricalCrossentropy(from_logits=True) 유지(출력층에 Softmax가 없기 때문)
- 평가: model.evaluate(test_images, test_labels)로 최종 정확도 확인
- 확률/시각화: 튜토리얼의 probability_model 및 plotting 함수 사용
간단 MLP로 Fashion-MNIST를 분류하는 입문 예제입니다. 정확도는 ~0.88–0.90 수준으로 제시되며, from_logits=True 구성과 확률 변환용 Softmax 래퍼가 핵심 포인트입니다.
'인공지능 > 딥러닝 -파이썬 인공지능' 카테고리의 다른 글
| 마르코프 모델과 벨만 방정식 (0) | 2025.10.22 |
|---|---|
| CNN, MNIST 코드 분석 (0) | 2025.09.10 |
| RNN(순환 신경망), LSTM 그리고 cs231n (1) | 2023.11.12 |
| GAN(Generative Adversarial Network) (0) | 2022.11.07 |
| 아나콘다 No module named 'tensorflow' 해결법 (0) | 2022.10.27 |