import tensorflow as tf

                weights_initializer=contrib.layers.variance_scaling_initializer(),
                # l2 regularization
                weights_regularizer=contrib.layers.l2_regularizer(reg_lambda),
                # BN
                normalizer_fn=contrib.layers.batch_norm,
                normalizer_params={
                    "is_training": is_training,
                    "scale": True,
                    "updates_collections": None
                }
        ):
            fc1_1 = contrib.layers.fully_connected(X, 32, scope="fc1_1")
            fc1_2 = contrib.layers.fully_connected(X, 32, scope="fc1_2")

            if cross_stitch_enabled:
                with tf.variable_scope("cross_stitch_1"):
                    stitch1_1, stitch1_2 = apply_cross_stitch(fc1_1, fc1_2)
            else:
                stitch1_1, stitch1_2 = fc1_1, fc1_2

            fc2_1 = contrib.layers.fully_connected(stitch1_1, 32, scope="fc2_1")
            fc2_2 = contrib.layers.fully_connected(stitch1_2, 32, scope="fc2_2")

            if cross_stitch_enabled:
                with tf.variable_scope("cross_stitch_2"):
                    stitch2_1, stitch2_2 = apply_cross_stitch(fc2_1, fc2_2)
            else:
                stitch2_1, stitch2_2 = fc2_1, fc2_2

            dropout2_1 = contrib.layers.dropout(stitch2_1, keep_prob=keep_prob, is_training=is_training,
