import tensorflow as tf

        self.is_training_pl = tf.placeholder(tf.bool, shape=(), name='is_training_pl')

        self.bn_decay = train_rotation_prediction.get_bn_decay(batch)

        self.get_pred = partial(self.model_pred.get_model, 
                                is_training=self.is_training_pl, 
                                bn_decay=self.bn_decay,
                                num_angles=self.num_angles,
                                use_input_trans=self.use_input_trans,
                                use_feature_trans=self.use_feature_trans)
        self.get_loss = partial(self.model_pred.get_loss, use_trans_loss=self.use_trans_loss)

        with tf.variable_scope(name):
            self.noise = tf.placeholder(tf.float32, shape=[self.batch_size, self.noise_dim], name='noise')            # Noise vector.
            self.real_pc = tf.placeholder(tf.float32, shape=[self.batch_size] + self.n_output, name='real_pc')     # Ground-truth.
            with tf.variable_scope('rotation'):
                self.rot_label_pl = tf.placeholder(tf.int32, shape=self.batch_size, name='rot_label_pl')

                self.real_pc_rotated = self.rotate_n_angles(self.real_pc, self.rot_label_pl)
                self.real_pc_pred, real_pc_end_points = self.get_pred(self.real_pc_rotated)
                self.real_pc_rot_loss = self.get_loss(self.real_pc_pred, self.rot_label_pl, real_pc_end_points)

            with tf.variable_scope('generator'):
                self.generator_out = self.generator(self.noise, self.n_output, **gen_kwargs)
