728x90
1. validation
def build_model():
model = Sequential()
model.add(Dense(units=64,activation='relu',input_shape=(9,)))
model.add(Dense(units=64,activation='relu'))
model.add(Dense(units=1,activation='linear'))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),loss='mse',metrics=['mse','mae'])
return model
model=build_model()
model.summary()
위 코드와 같이 모델링을 끝냈다.
이제 위에서 만든 model이라는 인공지능을 fit하는 과정에서
validation을 사용할 것이다.
# 밸리데이션이란, 에포크가 한 번 끝날 때 마다, 학습에 사용하지 않은 데이터로
# 시험을 보는 것을 말한다.
# 테스트란, 인공지능이 완전히 학습이 다 끝난 상태에서 평가하는 것을 테스트라고 하고,
# 밸리데이션은 학습 중에 에포크가 끝날 때 마다 평가하는 것을 말한다.
epoch_history=model.fit(X_train,y_train,epochs=200,validation_split=0.2)
위와같이 코드를 작성 해주면
이전과 다르게 val_loss , val_mse , val_mae 들을 확인할 수 있다.
이것을 차트로 시각화 해보면 아래 사진과 같다.
import matplotlib.pyplot as plt
def plot_history(history) :
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
plt.figure(figsize = (8, 12))
plt.subplot(2, 1, 1)
plt.xlabel('Eopoch')
plt.ylabel('Mean Abs Error [MPG]')
plt.plot(hist['epoch'], hist['mae'], label = 'Train Error')
plt.plot(hist['epoch'], hist['val_mae'], label = 'Val Error')
plt.ylim([0,5])
plt.legend()
plt.subplot(2, 1, 2)
plt.xlabel('Eopoch')
plt.ylabel('Mean Squared Error [MPG]')
plt.plot(hist['epoch'], hist['mse'], label = 'Train Error')
plt.plot(hist['epoch'], hist['val_mse'], label = 'Val Error')
plt.ylim([0,20])
plt.legend()
plt.show()
plot_history(epoch_history)
2. callback ( EarlyStopping Library )
이 그래프를 보면 수 백번 에포크를 진행한 이후에는 모델이 거의 향상되지 않는 것 같습니다.
model.fit 메서드를 수정하여 검증 점수가 향상되지 않으면 자동으로 훈련을 멈추도록 만들어 보겠습니다.
에포크마다 훈련 상태를 점검하기 위해 EarlyStopping 콜백(callback)을 사용하겠습니다. 지정된 에포크 횟수 동안 성능 향상이 없으면 자동으로 훈련이 멈춥니다.
# callback이란 내가 만든 함수를 프레임워크가 실행시켜주는 것!
# patience = 10 => 에포크 10번동안 val_loss가 더 작아지지 않으면(성능향상이 없으면) 학습을 멈춰라.
early_stop=tf.keras.callbacks.EarlyStopping(monitor='val_loss',patience=10)
이후
이 전 포스트 글들에서 중요하게 설명했듯이 학습을 새로 하고 싶으면 우선 모델을 새로 만들어줍니다.
model = build_model()
epoch_history=model.fit(X_train,y_train,epochs=10000000,validation_split=0.2,callbacks=[early_stop])
일부로 멈추는 것을 강조하기위해 epochs를 높은 숫자로 설정을 해보았습니다.
127번의 epoch끝에 멈춘 것을 확인할 수 있습니다. 이를 더 쉽게 보기위해 차트로 시각화 해보겠습니다.
위에서 설명했 듯이 성능향상이 더이상 없는 곳에서 그래프가 멈추는 것을 확인할 수 있습니다.
'인공지능 > 딥러닝' 카테고리의 다른 글
딥러닝 : softmax로 나온 결과를 레이블 인코딩으로 바꾸는 방법 (0) | 2022.12.29 |
---|---|
딥러닝 : Fashion mnist 10개로 분류된 패션 이미지를 tensorflow를 이용해 분류하기 / Flatten , softmax , 분류의 문제 loss 셋팅법 (0) | 2022.12.28 |
딥러닝 : learning rate를 optimizer에 셋팅하기. (0) | 2022.12.28 |
딥러닝 : Tensorflow로 리그레션 문제 모델링 하는 방법 (0) | 2022.12.28 |
딥러닝 : GridSearch를 이용한 최적의 하이퍼 파라미터 찾기 (0) | 2022.12.27 |