import tensorflow as tf

        opt_denoise = self.optimizer_func(self.hparams.learning_rate)
        opt_ranker = self.optimizer_func(self.ranker_learning_rate)

        denoise_updates = opt_denoise.apply_gradients(zip(denoise_gradients, denoise_params),
                                            global_step=self.global_step)
        ranker_updates = opt_ranker.apply_gradients(zip(ranking_model_gradients, ranking_model_params))

        self.updates = tf.group(denoise_updates, ranker_updates)

    def DenoisingNet(self, list_size, forward_only=False, scope=None):
        with tf.variable_scope(scope or "denoising_model"):
            # If we are in testing, do not compute propensity
            if forward_only:
                return tf.ones_like(self.output)#, tf.ones_like(self.output)
