이항 분류
MNIST
- 1998년 미국 국립표준기술연구소 National Institute of Standards and Technology에서 개발
- 가로 28 × 세로 28 크기의 손으로 쓴 숫자(0~9) 흑백 이미지
- 6만개의 훈련용 이미지와 1만개의 테스트용 이미지로 구성
- 가장 유명한 컴퓨터 비전 연구용 데이터
데이터 다운로드
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train: 훈련용 이미지y_train: 훈련용 이미지의 클래스(0, 1, 2, …, 9)x_test: 테스트용 이미지y_test: 테스트용 이미지의 클래스 (0, 1, 2, …, 9)
데이터 보기
데이터 크기 보기 (가로 28, 세로 28)
x_train[0].shape
이미지로 보기
from PIL import Image
Image.fromarray(x_train[0])
클래스 보기
y_train[0]
이항 분류와 다항 분류
- 다항 분류: 셋 이상 중에 하나로 분류하는 것(MNIST는 10가지로 분류하는 다항 분류 데이터셋)
- 이항 분류: 둘 중에 하나로 분류하는 것
- 이항 분류를 위해 0과 1만 뽑음
import numpy as np
def filter_binary(x, y, neg_cls, pos_cls):
cond = (y == neg_cls) | (y == pos_cls)
x_bin = x[cond]
y_bin = np.where(y[cond] == neg_cls, 0, 1)
return x_bin, y_bin
x_train_binary, y_train_binary = filter_binary(x_train, y_train, 0, 1)
- 이항 분류를 할 때는 항상 레이블이 0과 1이어야 함
- 3과 4를 뽑으면 3 → 0, 4 → 1로 레이블을 바꿔야
모형 정의
model = keras.models.Sequential( # 딥러닝 모형의 구성 요소를 순서대로 정의
[
keras.layers.Rescaling(1/255), # 입력 값의 범위를 0~255에서 0.0 ~ 1.0으로
keras.layers.Flatten(), # 이미지 평탄화
keras.layers.Dense(1, activation='sigmoid') # 이미지마다 1개의 출력
]
)
평탄화
Dense
- 선형 모형
y = wx + b형태의 레이어 - 모든 입력에 대해 가중치 w를 곱하고, 편향 b를 더함
- Fully Connected라고도 함
- -∞ ~ +∞ 를 출력
- 이항 분류 문제이므로 0 또는 1로 출력을 해야 함 → 활성화 함수(activation function)
시그모이드 함수 sigmoid function
- 출력층에서 0~1 사이의 출력을 표현하기 위해 사용
- S자(sigma)를 닮은(oid)이라는 뜻
- 계단 함수는 미분불가능하므로 점진적 학습이 어려움
- 0~1 사이에서 매끄럽게 변하는 함수
- 출력은 확률로 해석 (예: 0.8 → 1일 확률이 80%)
- 통계에서는 로지스틱(logistic) 함수라고 부름
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.