IT/DEV Study

[ML/Python] Keras를 이용한 Model 생성 및 학습 간단 정리

Ella.J 2023. 6. 8. 11:03
728x90
반응형

 

주의

개인적으로 짧게 공부하고 찾아본 내용들이라 부족한 부분이 많습니다.

보시고 수정이 필요하다 싶은 부분은 언제든지 댓글 남겨주시면 감사하겠습니다!

 

 

 

Keras

머신러닝 및 딥러닝 모델을 빌드하고 학습시키기 위한 Tensorflow의 상위 수준 API.

  •  사용자 친화적 : 인터페이스가 간단하고 일관적. 사용자 오류에 대해 명확하고 실행 가능한 피드백을 제공.
  •  모듈식 및 구성 가능 : Keras 모델은 거의 제한 없이 구성 가능한 빌딩 블록을 함께 연결하는 방식.
  •  쉽게 확장 가능 : 새로운 레이어, 측정항목, 손실 함수를 만들고 최첨단 모델을 개발.

 

1
2
import tensorflow as tf
#tf.keras
cs

 

 

 

1. 모델 설계

 

Sequential

순차적인 구조를 가진 모델 생성.

객체 생성 후 add() 메서드를 사용하여 입력층과 은닉층, 출력층 layer를 추가.

 

1
model = tf.keras.models.Sequential()
cs

 

GlobalAveragePooling2D

2D 입력 텐서의 공간 차원을 평균화하여 하나의 벡터로 변환.

 

1
model.add(tf.keras.layers.GlobalAveragePooling2D())
cs

 

Dense

뉴런 구성 요소 중 하나인 fully connected layer를 구현한 클래스.

  •  relu : 출력값을 0 이상의 값으로 변환. 은닉층에 많이 사용.
  •  softmax : 출력값을 다중 클래스 분류에 적합한 확률 값으로 변환. 다중 클래스 모델 출력층에 많이 사용.
  •  sigmoid : 출력값을 0과 1 사이의 값으로 변환. 이진 분류 모델에서 출력층에 많이 사용.

Dropout

신경망의 일반화 성능을 개선하기 위해 고안된 regularization 기법 중 하나.

무작위로 일부 뉴런을 선택하여 출력을 0으로 만들어 과적합을 방지하고, 모델의 일반화 능력을 향상.

  •  Dropout(0.25) : 무작위로 선택된 뉴런 중 25%를 삭제한다는 의미.

 

1
2
3
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.Dense(3, activation='softmax'))
cs

 

summary

생성된 모델 정보 확인.

 

1
model.summary()
cs

 

model.summary() 예시

 

 

 

2. 학습 및 검증용 이미지 로드

 

ImageDataGenerator

원본 데이터 파일들을 Numpy Array 형태로 가져온 후 객체 생성 및 이미지 전처리.

  •  rescale=1./255 : 값을 0과 1 사이로 변경.
  •  rotation_range=10 : 무작위 회전각도 10도 이내
  •  shear_range=0.1 : 층밀리기 강도 10%
  •  zoom_range=0.1 : 무작위 줌 범위 10%
  •  horizontal_flip/vertical_flip : 무작위로 가로/세로 뒤집기

 

1
2
3
train_data_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,
        horizontal_flip=True, rotation_range=10, shear_range=0.1, zoom_range=0.1)
test_data_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
cs

 

flow_from_directory

Numpy array Iterator 객체 생성. 내부적으로 yield를 사용하여 배치 사이즈만큼 그때그때마다 데이터를 전달하여 메모리를 절약.

  •  target_size : 설계 모델에 들어갈 인풋 이미지 사이즈 중 width, height 입력.
  •  batch_size : 이미지 데이터 원본 소스에서 한 번에 얼마만큼의 이미지 데이터를 가져올 것인지.
  •  class_mode
    • categorical : 2D 멀티-레이블 클래스. one-hot 인코딩 된 형태. 부호화된 라벨 반환.
    • sparse : 1D 멀티-레이블 클래스. 레이블 인코딩된 형태. 정수 라벨 반환.
    • binary : 1D 이진 분류 클래스. 0 또는 1인 형태. binary 라벨 반환.

 

1
2
3
4
5
6
7
8
9
train_dir = './train_image/'
test_dir= './test_image/'
 
train_data = train_data_gen.flow_from_directory(train_dir, batch_size=64
                    color_mode='rgb', shuffle=True, class_mode='categorical',
                    target_size=(224,224))
test_data = test_data_gen.flow_from_directory(test_dir, batch_size=64
                    color_mode='rgb', shuffle=True, class_mode='categorical',
                    target_size=(224,224))
cs

 

 

 

3. 모델 학습 환경설정

 

compile

학습방식에 대한 환경설정.

  • loss : 현재 가중치를 평가하는 데 사용한 손실 함수. 다중클래스=categorical_crossentropy
  • optimizer : 최적의 가중치를 검색하는 데 사용되는 최적 알고리즘.
  • metris : 평가 척도.

 

1
2
model.compile(loss='categorical_crossentropy'
              optimizer=tf.keras.optimizers.Adam(), metrics=['accuracy'])
cs

 

 

 

4. callback 함수 지정

 

ModelCheckPoint

Keras 모델을 학습하는 동안 일정한 간격으로 모델의 가중치를 저장하고, 최상의 성능을 보인 모델을 선택하는 기능 제공.

  • filepath : 문자열, 모델 가중치를 저장할 파일 경로.
  • monitor : 모니터링할 지표 지정.
  • verbose : 얼마나 자세하게 정보를 표시할지.
  • save_best_only : 가장 좋은 성능을 보인 가중치만 저장하는지 여부.
  • mode : 모니터링할 지표의 최소화 또는 최대화를 제어.

EarlyStopping

검증 손실이 더 이상 개선되지 않을 때 학습을 중단시키는 역할. 과적합을 방지하고 학습 시간을 단축.

  • monitor : 모니터링할 지표 지정.
  • patience : 개선이 없다고 판단하기 전에 대기할 epoch 수. 즉, 이 값만큼 검증 손실이 개선되지 않으면 학습을 중단.

 

1
2
3
checkpoint = tf.keras.callbacks.ModelCheckpoint('./test.h5', monitor='val_loss',   
                             verbose=1, save_best_only=True, mode='auto')
earlystopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)
cs

 

 

 

5. 모델 학습

 

fit

설계한 모델에 fit() 함수를 호출하면 ImageDataGenerator, flow_from_directory의 단계가 실질적으로 수행, 설정된 batch_size 만큼의 Numppy Array 데이터를 tensor로 바꾸고 설계한 모델의 인풋으로 입력되어 본격적인 학습을 시작.

  • step_per_epoch : 한 epoch에 사용할 step 수.
  • epoch : 전체 훈련 데이터셋에 대한 반복 횟수.
  • callbacks : 설정한 callback 함수 등록.

 

1
2
hist = model.fit(train_data, steps_per_epoch=10, epochs=30
                 callbacks=[checkpoint, earlystopping])
cs

 

model.fit() 예시

 

 

 

6. 학습한 모델 저장 및 로드

 

save

load_model

 

1
2
model.save('./test.h5')
model = tf.keras.models.load_model('./test.h5')
cs

 

 

 

 

참고사이트

 

https://wikidocs.net/book/9214

 

머신러닝 케라스 다루기 기초

《머신러닝 케라스 다루기 기초》은 딥러닝 프레임워크 중 하나인 케라스(Keras)를 활용하여 머신러닝을 구현하는 방법을 소개하는 책입니다. 책에서 다루는 내용은 머신러닝을 …

wikidocs.net

 

https://www.tensorflow.org/guide/keras/sequential_model?hl=ko 

 

Sequential 모델  |  TensorFlow Core

Google I/O에 참여해 주셔서 감사합니다. 주문형 모든 세션 보기 주문형 시청 Sequential 모델 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 설정 import tensorflow as

www.tensorflow.org

 

https://keras.io/ko/getting-started/sequential-model-guide/

 

Guide to the Sequential model - Keras Documentation

케라스 Sequential 모델 시작하기 Sequential 모델은 레이어를 선형으로 연결하여 구성합니다. 레이어 인스턴스를 생성자에게 넘겨줌으로써 Sequential 모델을 구성할 수 있습니다. from keras.models import Seq

keras.io

 

 

728x90
반응형