목차
반응형
콜백함수란?
모델을 학습시키는 도중에 어떤 작업을 할 수 있게 하는데 그 작업을 callback이라고 한다.
텐서보드 열기
- 우선 저장위치를 지정한다.
logdir=os.path.join('logs',datetime.now().strftime('%Y%m%d-%H%M%S'))
tensorboard=tf.keras.callbacks.TensorBoard(
log_dir=logdir,
write_graph=True,
write_images=True, #weight 등 시각화 여부
histogram_freq=1
)
LambdaCallback
- TensorBoard에 customize한 이미지, 그래프를 넣을 수 있음
www.tensorflow.org/tensorboard/image_summaries#setup
실시간으로 이미지가 어떻게 들어가는지 보게하는 작업
- file_writer를 사용한다
file_writer = tf.summary.create_file_writer(logdir)
for epoch in range(num_epochs):
for step, (images, labels) in enumerate(train_dataset):
train_step(images, labels)
with file_writer.as_default():
tf.summary.image('input_image', images, step=step+(step*epoch)) #몇번째 step인지 기록하기
tf.summary.scalar('train_loss', train_accuracy.result(), step=step+(step*epoch))
for test_images, test_labels in test_dataset:
test_step(test_images, test_labels)
template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
print (template.format(epoch+1,
train_loss.result(),
train_accuracy.result()*100,
test_loss.result(),
test_accuracy.result()*100))
LearningRateScheduler
- learning rate를 관리하는 함수를 정의한다.
def scheduler(epoch):
if epoch<10:
return 0.001
else:
return 0.001*math.exp(0.1*(10-epoch))
- verbose=1이면 로그를 보여줌
learning_rate_scheduler=tf.keras.callbacks.LearningRateScheduler(scheduler, verbose=1)
model.fit_generator(
train_dataset,
steps_per_epoch=steps_per_epoch,
validation_data=test_dataset,
validation_steps=validation_steps,
epochs=num_epochs,
callbacks=[learning_rate_scheduler]
)
Checkpoint
- 모델이 학습하다가 특정 조건을 만족하면 모델의 weight을 저장하는 것이다.
- save_best_only : accuracy가 올라갔을 때만 저장하라는 뜻이다.
- monitor 는 모니터하고 싶은 값으로 변경하면 된다
- loss면 mode를 min으로 해야 한다. 지금은 accuracy라서 mode가 max인 상태다.
checkpoint=tf.keras.callbacks.ModelCheckpoint(save_path,
monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')
callbacks에 해당 checkpoint를 넣어주면 된다.
model.fit_generator(
train_dataset,
steps_per_epoch=steps_per_epoch,
validation_data=test_dataset,
validation_steps=validation_steps,
epochs=num_epochs,
callbacks=[checkpoint]
)
다음과 같이 모델이 저장되었다고 나온다.
모델 저장하는 방법
model.save(save_path, include_optimizer=True)
모델 불러오기
model=tf.keras.models.load_model('my_model.h5')
모델 저장 - 2
model.save_weights('model_weights.h5')
모델 불러오기 - 2
model.load_weights('model_weights.h5')
반응형
'Study > 머신러닝' 카테고리의 다른 글
[1] 머신러닝 - numpy 기초 (0) | 2021.05.04 |
---|---|
[PyTorch] torchvision을 활용한 image transform (0) | 2021.01.31 |
[tensorflow] tf.data를 사용해 이미지 데이터 학습시키기 (0) | 2021.01.25 |
[tensorflow] dataframe 만들고 dataframe으로 학습시키기 (0) | 2021.01.25 |
[tensorflow] ImageDataGenerator로 생성한 이미지 데이터로 학습 (0) | 2021.01.25 |