model = models.Sequential()
model.add(layers.Dense(input_dim=8, units=256, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu')) # elu or relu
model.add(layers.Dense(units=512, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dense(units=512, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dense(units=256, activation=None, kernel_initializer=initializers.he_uniform()))
model.add(layers.Activation('elu'))
model.add(layers.Dropout(rate=0.5))
model.add(layers.Dense(units=2, activation='softmax')) # One-hot vector for 0 & 1
model.compile(optimizer=optimizers.Adam(),
loss=losses.categorical_crossentropy,
metrics=[metrics.categorical_accuracy])
model.trainable=False # theta 변화 하지 않도록, trained model로 전이학습에 활용할 때 설정
model.summary()
Checkpoint
# 모델 체크포인트 파일(중간 저장 모델)을 저장할 경로 설정
checkpoint_path = 'saved_models/titanic_4-layer_elu.h5'
# "ModelCheckpoint" 콜백함수 객체 생성
callback_checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
monitor='val_loss', # default
save_best_only=True, # "Save" the "best" model "only"
verbose=0)
# 콜백함수를 호출하며 모델 학습 진행
history = model.fit(train_data, train_label,
batch_size=100, epochs=100, validation_split=0.3, verbose=0,
callbacks=[callback_checkpoint]) # 콜백 함수 추가
성능 확인
# 마지막 학습 완료 시점을 기준으로 한 모델 성능
result = model.evaluate(test_data, test_label)
print('loss (cross-entropy) :', result[0])
print('test accuracy :', result[1])
# 가장 낮은 Validation loss를 기준으로 한 (저장된) 모델 성능
model = models.load_model('저장파일.h5') # "Load" the "model"
result = model.evaluate(test_data, test_label)
print('loss (cross-entropy) :', result[0])
print('test accuracy :', result[1])
* 코드 실제 적용할 때 참고하면 좋을 코드
출처: https://teddylee777.github.io/tensorflow/keras-콜백함수-vol-03
from keras.callbacks import ModelCheckpoint, EarlyStopping
filename = 'checkpoint-epoch-{}-batch-{}-trial-001.h5'.format(EPOCH, BATCH_SIZE)
checkpoint = ModelCheckpoint(filename, # file명을 지정합니다
monitor='val_loss', # val_loss 값이 개선되었을때 호출됩니다
verbose=1, # 로그를 출력합니다
save_best_only=True, # 가장 best 값만 저장합니다
mode='auto' # auto는 알아서 best를 찾습니다. min/max
)
earlystopping = EarlyStopping(monitor='val_loss', # 모니터 기준 설정 (val loss)
patience=10, # 10회 Epoch동안 개선되지 않는다면 종료
)
model.compile(optimizer='adam', loss='mae', metrics=['mae'])
model.fit(x_train, y_train,
validation_data=(x_valid, y_valid),
epochs=EPOCH,
batch_size=BATCH_SIZE,
callbacks=[checkpoint, earlystopping], # checkpoint, earlystopping 콜백
)
'멋쟁이 사자처럼 AI SCHOOL 5기 > Today I Learned' 카테고리의 다른 글
[7주차 총정리] DNN (Deep Neural Network) 발달 흐름 정리 (0) | 2022.04.30 |
---|---|
[7주차 총정리] TF2 Regression (tensorflow.keras) (0) | 2022.04.29 |
[7주차 총정리] TF2 Classification (tensorflow.keras) (0) | 2022.04.29 |
[7주차 총정리] Neural Network에서 오버피팅 피하는 방법 (Dropout, Batch normalization) (0) | 2022.04.28 |
[7주차 총정리] Gradient Descent 활용한 신경망 학습 과정 (Neural Network Optimization) (0) | 2022.04.28 |