def add_training_ops(self):
def apply_gradient_clipping(gradient):
if gradient is not None:
return tf.mul(tf.clip_by_value(tf.abs(grad), 0.1, 1.),
tf.sign(grad))
else:
return None
# optimizer = tf.train.GradientDescentOptimizer(learning_rate=self.learning_rate)
optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate,
beta1=0.9, beta2=0.999,
epsilon=1e-08,
use_locking=False, name='Adam')
loss_op = self.loss_op + config.weight_decay_factor * tf.add_n(
[tf.nn.l2_loss(v) for v in tf.get_collection('weights_decay')])
gvs = optimizer.compute_gradients(loss_op)
if self._clip_gradients:
gvs = [(apply_gradient_clipping(grad), var) for grad, var in gvs]
train_op = optimizer.apply_gradients(gvs)
return train_op
评论列表
文章目录