import tensorflow as tf

        use_aux_head = knobs['use_aux_head'] # Whether to use auxiliary head
        stem_ch = initial_block_ch * stem_ch_mul

        # Layers with reduction cells (otherwise, normal cells)
        reduction_layers = [L // 3, L // 3 * 2 + 1]

        # Layers with auxiliary heads
        # Aux heads speed up training of good feature repsentations early in the network
        # Add aux heads only if enabled and downsampling width can happen 3 times
        aux_head_layers = []
        if use_aux_head and w % (2 << 3) == 0:
            aux_head_layers.append(reduction_layers[-1] + 1)

        with tf.variable_scope('model', reuse=(not is_train)):

            # "Stem" convolution layer (layer -1)
            with tf.variable_scope('layer_stem'):
                X = self._do_conv(X, w, h, in_ch, stem_ch, filter_size=3, no_relu=True, is_train=is_train) # 3x3 convolution
                stem = (X, w, h, stem_ch)

            # Core layers of cells
            block_ch = initial_block_ch
            aux_logits_list = [] # Stores list of logits from aux heads
            layers = [stem, stem] # Stores previous layers. layers[i] = (<layer (i + 1)>, <width>, <height>, <channels>)
            for l in range(L + 2):
                utils.logger.log('Building layer {}...'.format(l))
