코드 13-23 모델 훈련을 위한 파이프라인 정의

    generator = create_generator()
    discriminator = create_discriminator()
    
    @tf.function
    def train_step(images):
        noise = tf.random.normal([BATCH_SIZE, noise_dim])
    
        with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape: ------ ①
            generated_images = generator(noise, training=True)
            real_output = discriminator(images, training=True) ------ 실제 이미지를 사용하여 판별자 훈련 후 판별 값 반환
            fake_output = discriminator(generated_images, training=True) ------ 모조 이미지를 사용하여 판별자 훈련 후 판별 값 반환
            gen_loss = G_loss(fake_output) ------ 생성자에 대한 오차 계산
            disc_loss = D_loss(real_output, fake_output) ------ 판별자에 대한 오차 계산
            gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables) ------ GradientTape()를 사용하여 생성자의 기울기 계산
            gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.  
                                         trainable_variables)------ GradientTape()를 사용하여 판별자의 기울기 계산
            G_optimizer.apply_gradients(zip(gradients_of_generator,
                                        generator.trainable_variables)) ------ 기울기를 생산자 옵티마이저에 적용
            D_optimizer.apply_gradients(zip(gradients_of_discriminator,
                                        discriminator.trainable_variables)) ------ 기울기를 판별자 옵티마이저에 적용

    ① 텐서플로에서는 GradientTape를 사용해서 주어진 입력에 대한 연산의 미분 값을 자동으로 계산할 수 있습니다. tf.GradientTape는 실행된 모든 연산을 테이프(tape)에 기록하고, 후진 자동 미분(reverse mode differentiation)을 사용하여 기록된 연산의 기울기를 계산합니다.

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