//  [python]
def _create_model(self):
        # Dnn part
        with tf.variable_scope('dnn'):
            # input layer
            with tf.variable_scope('input_from_feature_columns',
                                   partitioner=self._input_layer_partitioner,
                                   reuse=tf.AUTO_REUSE):
                if self._adaptive_emb and not self.tf:
                    '''Adaptive Embedding Feature Part 1 of 2'''
                    adaptive_mask_tensors = {}
                    for col in CATEGORICAL_COLUMNS:
                        adaptive_mask_tensors[col] = tf.ones([args.batch_size],
                                                             tf.int32)
                    net = tf.feature_column.input_layer(
                        features=self._feature,
                        feature_columns=self._emb_stacking_columns,
                        adaptive_mask_tensors=adaptive_mask_tensors)
                else:
                    net = tf.feature_column.input_layer(
                        features=self._feature,
                        feature_columns=self._emb_stacking_columns)
                self._add_layer_summary(net, 'input_from_feature_columns')

            # hidden layers
            dnn_scope = tf.variable_scope('dnn_layers', \
                partitioner=self._dense_layer_partitioner, reuse=tf.AUTO_REUSE)
            with dnn_scope.keep_weights(dtype=tf.float32) if self.bf16 \
                else dnn_scope:
                if self.bf16:
                    net = tf.to_bfloat16(net)

                net = self._dnn(net, self._dnn_hidden_units, 'hiddenlayer')

                if self.bf16:
                    net = tf.to_float(net)

                # dnn logits
                logits_scope = tf.variable_scope('logits')
                with logits_scope.keep_weights(dtype=tf.float32) if self.bf16 \
                    else logits_scope as dnn_logits_scope:
                    dnn_logits = tf.layers.dense(net,
                                                 units=1,
                                                 activation=None,
                                                 name=dnn_logits_scope)
                    self._add_layer_summary(dnn_logits, dnn_logits_scope.name)

        # cross net
        with tf.variable_scope(
            'cross', partitioner=self._dense_layer_partitioner) as scope:
            # input layer
            with tf.variable_scope('input_from_feature_columns',
                                   partitioner=self._input_layer_partitioner,
                                   reuse=tf.AUTO_REUSE):
                if self._adaptive_emb and not self.tf:
                    '''Adaptive Embedding Feature Part 1 of 2'''
                    adaptive_mask_tensors = {}
                    for col in CATEGORICAL_COLUMNS:
                        adaptive_mask_tensors[col] = tf.ones([args.batch_size],
                                                             tf.int32)
                    net = tf.feature_column.input_layer(
                        features=self._feature,
                        feature_columns=self._emb_stacking_columns,
                        adaptive_mask_tensors=adaptive_mask_tensors)
                else:
                    net = tf.feature_column.input_layer(
                        features=self._feature,
                        feature_columns=self._emb_stacking_columns)
                self._add_layer_summary(net, 'input_from_feature_columns')

            # cross layers
            cross_scope = tf.variable_scope('cross_layers', \
                partitioner=self._dense_layer_partitioner, reuse=tf.AUTO_REUSE)
            with cross_scope.keep_weights(dtype=tf.float32) if self.bf16 \
                else cross_scope:
                if self.bf16:
                    net = tf.to_bfloat16(net)

                net = self._cross_net(net, layer_name = 'crosslayer')

                if self.bf16:
                    net = tf.to_float(net)

                # cross logits
                logits_scope = tf.variable_scope('logits')
                with logits_scope.keep_weights(dtype=tf.float32) if self.bf16 \
                    else logits_scope as cross_logits_scope:
                    cross_logits = tf.layers.dense(net,
                                                 units=1,
                                                 activation=None,
                                                 name=cross_logits_scope)
                    self._add_layer_summary(cross_logits, cross_logits_scope.name)



        self._logits = tf.add_n([dnn_logits, cross_logits])
        self.probability = tf.math.sigmoid(self._logits)
        self.output = tf.round(self.probability)