본문 바로가기
책&강의 학습/올인원 패키지 :딥러닝&인공지능

[패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 15회차 미션

by 소한보 2020. 7. 13.

Part3-14 callbacks - tensorboard 2

expert한 버젼에서 하는방법
1.x버젼 보다 편리해진점 file_writer만 가져오면 준비끝
매 batch마다 기록하면 디테일하게 볼수 있음. but학습속도가 느려짐

loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()

train_loss = tf.keras.metrics.Mean(name='train_loss')
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')

test_loss = tf.keras.metrics.Mean(name='test_loss')
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')

@tf.function
def train_step(images, labels):
    with tf.GradientTape() as tape:
        predictions = model(images)
        loss = loss_object(labels, predictions)  # Loss 계산
    gradients = tape.gradient(loss, model.trainable_variables)  # 모델의 trainable_variable을 하여금 loss를 통해 기울기를 얻음
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))  # 구한 최적화된 값을 variable에 적용

    train_loss(loss)
    train_accuracy(labels, predictions)

@tf.function
def test_step(images, labels):
    predictions = model(images)
    t_loss = loss_object(labels, predictions)

    test_loss(t_loss)
    test_accuracy(labels, predictions)

logdir = os.path.join('logs',  datetime.now().strftime("%Y%m%d-%H%M%S"))
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))
        tf.summary.scalar('train_loss', train_loss.result(), step=step + (step*epoch))
        tf.summary.scalar('train_accuracy', 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))

텐서보드 실행방법
텐서보드 오류로 인해 일단 미작동...

tensorboard

시간대에 어떤 value값이 나왔는지도 알 수 있음
smoothing을 높여서 일반화 시켜서 그래프를 볼수 있음

graph

설계했던 모델을 볼 수 있음

histogram

분포 확인가능

후기

tensorboard오류로 제대로 실습못해봄
뭔가 슥지나간 느낌... 오류 문의답변오면 다시 해봐야겠음

Part3-15 callbaks - learning rate schedule

learning rate이 높으면 학습이 잘안됨
learning rate이 낮으면 로컬미니마에 빠짐
처음에는 높였다가 점점 줄여주는 방법이 필요

 #매 에폭마다 scheduler가 별경해줌
import math
def scheduler(epoch):
    if epoch <10:
        return 0.001
    else :
        return 0.001 * math.exp(0.1 * (10-epoch))
 # 아래와 같은형태로 줄여짐        
for epoch in range(10,20):
    print(0.001 * math.exp(0.1 * (10-epoch)))
>>> 0.001
0.0009048374180359595
0.0008187307530779819
0.0007408182206817179
0.0006703200460356394
0.0006065306597126335
0.0005488116360940264
0.0004965853037914095
0.0004493289641172216
0.00040656965974059914
 #이걸 callback에 넣어주기만 하면됨
 #verbose 1이면 lr이 변경될떄 알려줌
learning_rate_scheduler = tf.keras.callbacks.LearningRateScheduler(scheduler,verbose=1)


줄이는 요령?
0.001로 처음 높게 잡아서 해보고 문제가 생기는 epoch을 기준으로 0.1곱해서 변형
텐서보드를 보다보면 언제쯤 줄여야하는지 감이 생길것임

Part3-16 model checkpoint

학습을 이어할수 있도록 모델 저장
2.0 넘어오면서 pd도 같이 저장됨

save_path = 'checkpoints'
# save_best_only 오르는 경우에만 저장
checkpoint = tf.keras.callbacks.ModelCheckpoint(
    save_path, monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')

딥러닝/인공지능 올인원 패키지 Online

댓글