import tensorflow as tf

        }

        self._sess.run(m.vars_assign_op, feed_dict=var_feeddict)

    def _make_placeholders(self):
        w = self._train_params['image_size']
        h = self._train_params['image_size']
        in_ch = 3 # Num channels of input images

        train_images_ph = tf.placeholder(tf.int32, name='train_images_ph', shape=(None, w, h, in_ch)) # Train images
        pred_images_ph = tf.placeholder(tf.int32, name='pred_images_ph', shape=(None, w, h, in_ch)) # Predict images
        train_classes_ph = tf.placeholder(tf.int32, name='train_classes_ph', shape=(None,)) # Train classes
        pred_classes_ph = tf.placeholder(tf.int32, name='pred_classes_ph', shape=(None,)) # Predict classes
        normal_arch_ph = tf.placeholder(tf.int32, name='normal_arch_ph', shape=(CELL_NUM_BLOCKS, 4))
        reduction_arch_ph = tf.placeholder(tf.int32, name='reduction_arch_ph', shape=(CELL_NUM_BLOCKS, 4))

        return _ModelPlaceholder(train_images_ph, train_classes_ph, pred_images_ph, pred_classes_ph,
                                normal_arch_ph, reduction_arch_ph)

    def _forward(self, X, step, normal_arch, reduction_arch, is_train=False, **knobs):
        K = self._train_params['K'] # No. of classes
        in_ch = 3 # Num channels of input images
        w = self._train_params['image_size'] # Initial input width
        h = self._train_params['image_size'] # Initial input height
        dropout_keep_prob = knobs['dropout_keep_prob']
        use_dynamic_arch = knobs['downscale']
        L = knobs['num_layers'] # Total number of layers
        initial_block_ch = knobs['initial_block_ch'] # Initial no. of channels for operations in block
