Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)