def create(self): # current gradient gradient_computer = gc.ScopeGradientComputer(self.opt, self.loss, self.model.weights) grads_and_vars = gradient_computer.compute() g_cur, v_cur = zip(*grads_and_vars) g_pre = self.load_tensors(self.learning_spec.model_dir, 'fisher') v_pre = self.load_tensors(self.learning_spec.model_dir, 'main') meta_batch = self.combine_meta_features(g_cur, g_pre, v_pre, v_cur) meta_output = self.meta_model(meta_batch) tf.summary.scalar(name='losses/meta_output', tensor=tf.reshape(meta_output, shape=[])) self.total_loss = self.loss + self.alpha * meta_output * self.add_meta_loss( g_pre, self.model.weights, v_pre) tf.summary.scalar(name='losses/total_loss', tensor=tf.reshape(self.total_loss, shape=[])) total_gradient_computer = gc.ScopeGradientComputer( self.opt, self.total_loss, self.model.weights) total_grads_and_vars = total_gradient_computer.compute() train_op = self.global_step_increase(grads_and_vars) gradient_hook = self.compute_curvature(total_grads_and_vars) return tf.estimator.EstimatorSpec(self.mode, loss=self.total_loss, train_op=train_op, training_hooks=gradient_hook)
def create(self): # current gradient tf.summary.scalar(name='losses/cur_loss', tensor=self.loss) gradient_computer = gc.ScopeGradientComputer(self.opt, self.loss, self.model.weights) grads_and_vars = gradient_computer.compute() g_cur, v_cur = zip(*grads_and_vars) joint_gradient_computer = gc.ScopeGradientComputer( self.opt, self.joint_loss, self.model.weights) joint_grads_and_vars = joint_gradient_computer.compute() g_joint, _ = zip(*joint_grads_and_vars) g_pre = self.load_tensors(self.meta_learning_spec.model_dir, 'fisher') v_pre = self.load_tensors(self.meta_learning_spec.model_dir, 'main') meta_batch = self.combine_meta_features(g_cur, g_pre, v_cur, v_pre) meta_label = self.make_meta_labels(g_cur, g_joint, v_cur, v_pre, g_pre) tf.summary.scalar(name='losses/meta_label', tensor=tf.reshape(meta_label, [])) meta_output = self.meta_model(meta_batch) tf.summary.scalar(name='losses/meta_output', tensor=tf.reshape(meta_output, [])) meta_loss = tf.losses.absolute_difference(meta_output, meta_label) tf.summary.scalar(name='losses/meta_loss', tensor=meta_loss) meta_gradient_computer = gc.ScopeGradientComputer( self.meta_opt, meta_loss, self.meta_model.weights) meta_grads_and_vars = meta_gradient_computer.compute() ops = self.global_step_increase_meta(meta_grads_and_vars) gradient_hook = self.compute_curvature(grads_and_vars) return tf.estimator.EstimatorSpec(self.mode, loss=self.loss, train_op=tf.group(ops), training_hooks=gradient_hook)
def create(self): gradient_computer = gc.ScopeGradientComputer(self.opt, self.loss, self.model.weights) grads_and_vars = gradient_computer.compute() if self.mode == tf.estimator.ModeKeys.EVAL: return self.evaluate(self.loss) train_op = self.global_step_increase(grads_and_vars) return tf.estimator.EstimatorSpec(self.mode, loss=self.loss, train_op=train_op)
def create(self): self.loss = self.loss + self.alpha * self.add_ewc_loss( self.model.weights) gradient_computer = gc.ScopeGradientComputer(self.opt, self.loss, self.model.weights) grads_and_vars = gradient_computer.compute() if self.mode == tf.estimator.ModeKeys.EVAL: return self.evaluate(self.loss) train_op = self.global_step_increase(grads_and_vars) gradient_hook = self.compute_curvature(grads_and_vars) return tf.estimator.EstimatorSpec(self.mode, loss=self.loss, train_op=train_op, training_hooks=gradient_hook)
def create(self): g_pre = self.load_tensors(self.learning_spec.model_dir, 'fisher') v_pre = self.load_tensors(self.learning_spec.model_dir, 'center') self.loss = self.loss + self.alpha * self.add_ewc_loss( self.model.weights, v_pre, g_pre) gradient_computer = gc.ScopeGradientComputer(self.opt, self.loss, self.model.weights) grads_and_vars = gradient_computer.compute() if self.mode == tf.estimator.ModeKeys.EVAL: return self.evaluate(self.loss) train_op = self.global_step_increase(grads_and_vars) gradient_hook = self.compute_curvature(grads_and_vars) return tf.estimator.EstimatorSpec(self.mode, loss=self.loss, train_op=train_op, training_hooks=gradient_hook)