본문 바로가기
Data/[스파르타 내일배움캠프]

[TIL]본캠프 41일차

by MIN_JOON 2024. 6. 14.
#딥러닝을 이용한 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가 모두 낮아지지 않는 경우
      모델을 복잡하게 만들어 해결

머신러닝 학습주차 끝!!!

딥러닝도 대충 알았다...!!

'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