def _setup_model_loss(self, keep_moving_averages=False, num_classes=10):
self.learning_rate = tf.placeholder(
tf.float32, shape=[], name="learning_rate_placeholder")
optimizer = self._optimizer(self.learning_rate, optname=self.cnf.get(
'optname', 'momentum'), **self.cnf.get('opt_kwargs', {'decay': 0.9}))
self.grads_and_vars, self.training_loss = self._process_towers_grads(
optimizer, self.model, is_classification=self.classification, loss_type=self.loss_type)
if self.clip_norm and not self.clip_by_global_norm:
self.grads_and_vars = self._clip_grad_norms(
self.grads_and_vars, max_norm=self.norm_threshold)
apply_gradients_op = optimizer.apply_gradients(self.grads_and_vars)
if keep_moving_averages:
variables_averages_op = self._moving_averages_op()
with tf.control_dependencies([apply_gradients_op, variables_averages_op]):
self.train_op = tf.no_op(name='train_op')
else:
self.train_op = apply_gradients_op
评论列表
文章目录