def build_loss(self, beta, task, weight_decay):
batch_size = task['batch_size']
with tf.variable_scope("network") as scope:
network = self.build_network(self.x)
logits = linear(network, num_outputs=10)
with tf.name_scope('loss'):
kl_terms = [ batch_average(kl) for kl in tf.get_collection('kl_terms') ]
if not kl_terms:
kl_terms = [ tf.constant(0.)]
N_train = self.dataset['train'][0].shape[0]
Lz = tf.add_n(kl_terms)/N_train
Lx = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=self.y))
beta = tf.constant(beta)
L2 = tf.add_n([tf.nn.l2_loss(v) for v in tf.trainable_variables() ])
loss = Lx + beta * Lz + weight_decay * L2
correct_prediction = tf.equal(tf.argmax(logits,1), tf.argmax(self.y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
self.loss = loss
self.error = (1. - accuracy) * 100.
self.Lx = Lx
self.Lz = Lz
self.beta = beta
评论列表
文章目录