상세 컨텐츠

본문 제목

[PLAYDATA] 데이터 엔지니어링 9월 3주차 9/16

PLAYDATA/PLAYDATA데일리노트

by Na느님 2023. 9. 16. 21:49

본문

  • 9월 16일
인공신경망 모델 개발에 도움을 주는 기능들을 알아본다.

 

 

history객체

keras패키지의 model.fit함수를 사용하면 fit함수는 인공신경망 객체인 model을 학습시키고 마지막에 history객체를 반환한다.

history객체에는 각 epoch마다 loss와 accuracy를 담고 있으며, matplotlib패키지를 통해 시각화가 가능하다.

history = model.fit(...)

import matplotlib.pyplot as plt

plt.plot(history.history["loss"])

plt.xlabel("epoch")

plt.ylabel("loss")

plt.show()

 

Tip) history객체에 검증데이터의 loss와 accuracy까지 포함하고 싶다면?

fit함수의 옵션에 validation_data를 추가한다(매개변수로 전달).

e.g.) validation_data = (val_scaled, val_target)

-> 검증데이터의 정보까지 포함하려는 이유는 과대/과소적합을 피하기 위해서이다.

 

 

인공신경망에서의 규제 방법

인공신경망은 릿지/라쏘회귀 같은 규제와는 다른 규제를 사용한다.

 

드롭아웃

이 방식은 어떤 층에 있는 일부 뉴런을 무작위로 비활성화(출력을 0으로 고정)하는 방식의 규제 방법이다.

add()함수 등을 사용해 드롭아웃 객체를 삽입하면 된다. 드롭아웃 객체가 삽입되면 객체 바로 앞의 뉴런층에 드롭아웃이 적용된다.

e.g.) 입력층 -> 은닉층1 -> 은닉층2 -> 드롭아웃 -> 은닉층3 -> 출력층

이러면 은닉층2에 드롭아웃이 적용된다.

드롭아웃 객체는 keras.layers.Dropout(<rate>) 생성자를 호출해서 만들 수 있다. <rate>는 해당 층에서 드롭아웃을 적용할 비율을 의미한다.

 

Tip) 훈련이 끝나고 test나 predict를 수행할 때는 드롭아웃을 적용하지 말아야 한다. 하지만 keras패키지는 프로그래머가 수동으로 드롭아웃 층을 제거할 필요 없이 test나 predict를 할 때에는 자동으로 드롭아웃을 일시적으로 비활성화 한다.

 

 

모델 저장과 복원

가중치 저장

<model_obj>.save_weights(<save_path>)

 

모델 구조와 가중치 모두 저장

<model_obj>.save(<save_path>)

 

가중치 불러오기

<model_obj>.load_weights(<load_path>)

 

모델 구조와 가중치 모두 저장된 파일 불러오기

<model_obj> = keras.model.load_model(<load_path>)

 

(주의!) 가중치를 불러올 때에는 불러올 가중치에 해당하는 모델 구조와 적용 대상의 모델 구조가 완전히 일치 해야한다!

 

 

콜백

콜백(callback)이란 훈련 과정 도중에 지정된 작업을 수행할 수 있게 하는 객체이다.

일반적으로 fit()함수에 callbacks옵션을 넣어서, 객체들을 리스트 형태로 저장하여 전달한다.

 

epoch마다 모델 저장하는 콜백

checkpoint_cb = keras.callbacks.ModelCheckpoint(<file_name_to_save>[, save_best_only = T/F])

<model_obj>.fit(..., callbacks = [checkpoint_cb])

save_best_only가 True라면, 최상의 validation score인 경우만 저장

 

조기종료하는 콜백

조기종료(early stopping)란 너무 많은  학습에 의해 과대적합 되는 것을 방지하는 동작이다.

early_stopping_cb = keras.callbacks.EarlyStopping([patience = <n>][, restore_best_weights = T/F])

history = <model_obj>.fit(..., callbacks = [early_stopping_cb])

patience옵션은 연속적으로 validation score가 향상되지 않을 때 훈련을 중지.

-> 예를 들어 값이 2라면, 2번 연속 validation score가 상승하지 않으면 훈련을 멈춘다.

restore_best_weights을 True로 한다면 학습 후 가장 낮은 validation loss를 낸 가중치로 되돌린다.

 

Tip) 조기종료 콜백을 사용한다면 모델 자체의 epoch횟수를 크게 지정해도 상관없다.

 

 

관련글 더보기