def build_loss(self, session, texture_weight=15, tv=500):
if self.is_training:
with tf.name_scope('loss'):
self.loss = self.descriptor_loss.build(session, self.generator.image_in, texture_weight)
if tv > 0:
print("tv loss %d" % tv)
with tf.name_scope('tv_loss'):
batches, h, w, c = self.generator.out.get_shape().as_list()
x = self.generator.out[:,1:,:,:]
x_1 = self.generator.out[:,:(h-1),:,:]
y = self.generator.out[:,:,1:,:]
y_1 = self.generator.out[:,:,:w-1,:]
x_var = tf.nn.l2_loss(x - x_1)
y_var = tf.nn.l2_loss(y - y_1)
x_n = batches * (h-1) * w * c
y_n = batches * h * (w-1) * c
tv_loss = tv * (x_var/x_n + y_var/y_n)
self.loss = self.loss + tv_loss
loss_summary_name = "loss"
self.summary = tf.scalar_summary(loss_summary_name, self.loss)
image_summary_name = "out"
self.image_summary = tf.image_summary(image_summary_name, self.generator.out + utils.MEAN_VALUES, max_images=3)
input_summary_name = "in"
self.input_summary = tf.image_summary(input_summary_name, self.image + utils.MEAN_VALUES, max_images=3)
self.merged = tf.merge_all_summaries()
self.global_step = tf.Variable(0, name='global_step', trainable=False)
return self.loss
评论列表
文章目录