파이썬 딥러닝 - 04. 케라스 학습 과정

2020. 1. 12. 15:41Tech :Deep Learning

1.  학습 함수

캐라스에서는 만든 모델을 학습할 때 fit() 함수를 사용한다.

model.fit(x,y,batch_size=32,epochs=10)

주요 인자 x : 입력 데이터, y : 라벨값, batch_size = 몇 개의 샘플로 가중치를 갱신 할 것인지 지정, epochs : 학습 반복 횟수 를 의미한다. 배치 사이즈가 작을 수록 가중치 갱신이 자주 일어난다. ( 예를 들어 100문제를 x, 그에 대한 정답을 y, batch_size를 10으로 하면 10개 문제를 풀때마다 해답을 맞춰보면서 가중치 갱신이 일어나게 된다. epochs는 100문제를 몇 번 풀어볼까를 정하는 것인지인데 같은 문제를 반복해서 풀면 학습이 일어난다라고 생각하면 된다. 마냥 epochs를 늘리면 좋을 것 같지만 하나의 문제집만 계속 학습하면 새로운 문제집이 왔을 때 못 풀수 있다. 오버피팅이라고 함. 과유불급! )

2. 학습 과정 살펴보기

2.1. 히스토리 기능 사용하기

fit () 함수의 return 값으로 히스토리 객체를 얻을 수 있는데 아래 정보를 포함한다.

- 매 epoch 마다 훈련 손실값(loss), 훈련 정확도(acc), 검증 손실 값(val_loss), 검증 정확도 (val_acc)

hist = model.fit(X_train,Y_train,epochs=100,batch_size=10, validation_data=(X_val,Y_val))

print(hist.history['loss'])
print(hist.history['acc'])
print(hist.history['val_loss'])
print(hist.history['val_acc'])

matplotlib를 이용하면 그래프로 아래와 같이 표현 가능하다. (MNIST 데이터 학습 결과)

%matplotlib inline
import matplotlib.pyplot as plt

fig, loss_ax = plt.subplots()

acc_ax = loss_ax.twinx()

loss_ax.plot(hist.history['loss'],'y',label='train loss')
loss_ax.plot(hist.history['val_loss'],'r',label='val loss')
acc_ax.plot(hist.history['acc'],'b',label='train acc')
acc_ax.plot(hist.history['val_acc'],'g',label='val acc')

loss_ax.set_xlabel('epoch')
loss_ax.set_ylabel('loss')
acc_ax.set_ylabel('accuracy')

loss_ax.legend(loc='upper left')
acc_ax.legend(loc='lower left')
plt.show()

02Graph.ipynb
0.19MB

2.2 텐서보드와 연동하기

텐서플로우 기반으로 케라스와 구동할 경우 텐서보드를 사용할 수 있다. 먼저 백엔드를 keras.json에서 텐서플로우로 지정 후, TensorBoard라는 콜백함수를 생성한 뒤, fit 함수 인자로 넣어주기만 하면 된다.

tb_hist = keras.callbacks.TensorBoard(log_dir='./graph',histogram_freq=0,write_graph=True, write_images=True)
model.fit(x_train,y_train,epochs=1000,batch_size=10,validation_data=(x_val,y_val),callbacks=[tb_hist])

실행은 > tensorboard --logdir=~/Projects/Keras/_writing_graph 이런 식으로 실행 시 웹브라우저 주소가 출력되고 해당 주소를 실행하면 텐서보드를 볼 수 있다.