더북(TheBook)

2.5.2 훈련 스텝 실행하기

이 구현 작업에서 가장 어려운 부분은 ‘훈련 스텝’입니다. 한 배치 데이터에서 모델을 실행하고 가중치를 업데이트하는 일입니다. 이를 위해 다음이 필요합니다.

1. 배치에 있는 이미지에 대해 모델의 예측을 계산합니다.

2. 실제 레이블을 사용하여 이 예측의 손실 값을 계산합니다.

3. 모델 가중치에 대한 손실의 그레이디언트를 계산합니다.

4. 이 그레이디언트의 반대 방향으로 가중치를 조금 이동합니다.

그레이디언트를 계산하기 위해 2.4.4절에서 소개한 텐서플로의 GradientTape 객체를 사용하겠습니다.

def one_training_step(model, images_batch, labels_batch):
    with tf.GradientTape() as tape: 
        predictions = model(images_batch)                                   
        per_sample_losses = tf.keras.losses.sparse_categorical_crossentropy(
            labels_batch, predictions)                                      
        average_loss = tf.reduce_mean(per_sample_losses) 
    gradients = tape.gradient(average_loss, model.weights) 
    update_weights(gradients, model.weights) 
    return average_loss

정방향 패스를 실행합니다(GradientTape 블록 안에서 모델의 예측을 계산합니다).

가중치에 대한 손실의 그레이디언트를 계산합니다. gradients 리스트의 각 항목은 model.weights 리스트에 있는 가중치에 매칭됩니다.

이 그레이디언트를 사용하여 가중치를 업데이트합니다(이 함수는 잠시 후에 정의하겠습니다).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.