#딥러닝을 이용한 MNIST 데이터를 분류
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
# 데이터 로드 및 전처리
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train, X_test = X_train / 255.0, X_test / 255.0
y_train, y_test = to_categorical(y_train), to_categorical(y_test)
# 신경망 모델 구성
model = Sequential([Flatten(input_shape=(28,28),
Dense(unit=128, activation='relu'),
Dense(unit=64, activation = 'relu'),
Dense(unit=10, activation='softmax')
])
# 모델 컴파일 및 학습
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=5, validation_data=(X_test, y_test))
# 테스트 데이터에 대한 평가
loss, accuracy = model.evaluate(X_test, y_test)
print(f"신경망 분류 정확도: {accuracy:.2f}")
- 딥러닝을 이용한 MNIST 데이터 분류 코드 해석
- 해당 데이터는 손글씨 관련 데이터 셋
- to_categorical: 정수형 클래스 레이블을 원-핫 인코딩 벡터로 변환하는 함수
- 원-핫 인코딩(One-Hot Encoding): 클래스 레이블을 벡터 형태로 변환(해당하는 차원만 1, 나머지는 0)
- Dense(): 신경망의 기본적인 층(Dense가 많아지면 신경망 층이 늘어나는 것)
- unit: 해당 신경망 층의 노드 갯수(이왕이면 2의 지수 형태가 좋음)
→맨 마지막 층의 노드 수는 분류인 경우 클래스의 갯수만큼, 회귀인 경우 1로 - Flatten: 이미지 데이터에서 2차원 형태의 픽셀 데이터를 1차원 벡터 형태로 바꿔주는 함수
- input_shape: 맨 처음 층에서 반드시 사용해야하며, 데이터의 shape을 지정
- activation: 활성함수로 'relu'를 많이 사용(빠르고 계산이 편함)
→마지막 층의 활성함수는 분류인 경우 'softmax', 회귀인 경우는 None - optimizer: 경사하강법을 어떤 형태로 수행할 것인지(SGD, Mini-batch 등이 존재하며 adam이 많이 쓰임)
- loss: 모델을 학습할 때 사용되는 손실함수
→분류: 정답값이 원-핫 인코딩 형태이면 'categorical_crossentropy', 아니라면 ' sparse_categorical_crossentropy'
→회귀: MSE(mean_squared_error), RMSE도 활용 - metrics: 성능지표로 필수적이지 않음
- epochs: 학습을 진행하는 횟수로 많을수록 더 좋은 성능을 기대할 수 있지만 오버피팅 위험이 존재
- validation data: 평가용 데이터(튜플 형태)
- 과소적합(언더피팅)과 과대적합(오버피팅) 확인
- 과대적합: train 데이터의 loss는 낮아지는데, test 데이터의 loss가 낮아지지 않는 경우
→많은 해결 방법이 존재하며 early stopping이 많이 쓰임 - 과소적합: train 데이터의 loss와 test 데이터의 loss가 모두 낮아지지 않는 경우
→ 모델을 복잡하게 만들어 해결
- 과대적합: train 데이터의 loss는 낮아지는데, test 데이터의 loss가 낮아지지 않는 경우
머신러닝 학습주차 끝!!!
딥러닝도 대충 알았다...!!
'Data > [스파르타 내일배움캠프]' 카테고리의 다른 글
[TIL]본캠프 42일차(심화 프로젝트 1일차) (2) | 2024.06.17 |
---|---|
[WIL]본캠프 9주차 (0) | 2024.06.14 |
[TIL]본캠프 40일차 (1) | 2024.06.13 |
[TIL]본캠프 39일차 (1) | 2024.06.12 |
[TIL]본캠프 38일차 (1) | 2024.06.11 |