golbin / TensorFlow-Tutorials

텐서플로우를 기초부터 응용까지 단계별로 연습할 수 있는 소스 코드를 제공합니다
2.13k stars 1k forks source link

GAN.py 질문드립니다. #15

Closed taki0112 closed 7 years ago

taki0112 commented 7 years ago
loss_D = tf.reduce_mean(tf.log(D_real) + tf.log(1 - D_gene))
loss_G = tf.reduce_mean(tf.log(D_gene))

위 코드와 관련된 주석을 보면, 논문에서 loss_G와 loss_D를 최대화하는것이 GAN모델을 최적화하는것이다 라고 설명해주셨습니다.

따라서 이후 코드에서보면

train_D = tf.train.AdamOptimizer(learning_rate).minimize(-loss_D,
                                                         var_list=D_var_list)
train_G = tf.train.AdamOptimizer(learning_rate).minimize(-loss_G,
                                                         var_list=G_var_list)

에서 -를 붙여서, minimize해주셨습니다.

제가 위 코드를 실행하면서 loss_G와 loss_D에 대해서 tensorboard로 확인했습니다.

추가한 코드는 다음과 같습니다.

loss_D = tf.reduce_mean(tf.log(D_real) + tf.log(1 - D_gene))
tf.summary.scalar('loss_D', -loss_D)
loss_G = tf.reduce_mean(tf.log(D_gene))
tf.summary.scalar('loss_G', -loss_G)

근데, loss_D는 값이 증가하는 경향을 보이고, loss_G는 값이 감소하는 경향을 보이고있습니다. 뭔가 좀 이상하지 않나요 ? image

epoch를 1000까지 해봐서 지금 확인중입니다만.. loss_G는 감소하다가 나중에 증가하고있긴합니다. 근데 계속해서 증가하는경향을 보여야 하는거 아닌가요?

그래야 주석과 맞는 설명이 되는게 아니지 싶습니다. 제가 어떤부분을 잘못 이해하고있는걸까요?

답변부탁드립니다.

감사합니다.

golbin commented 7 years ago

loss_D와 loss_G를 각자 최대화 시키더라도, loss_D와 loss_G는 서로 연관관계가 있기 때문에 두 개의 손실값이 항상 같이 증가하는 경향을 보이지는 않을 것 입니다.

loss_D가 증가하려면 loss_G는 하락해야하고, loss_G가 증가하려면 loss_D는 하락해야하는 경쟁관계에 있기 때문입니다.