code: def _dnn(self, dnn_input, dnn_hidden_units=None, layer_name=""):
      for layer_id, num_hidden_units in enumerate(dnn_hidden_units):
          with tf.variable_scope(
              layer_name + "_%d" % layer_id,
              partitioner=self._dense_layer_partitioner,
              reuse=tf.AUTO_REUSE,
          ) as dnn_layer_scope:
              dnn_input = tf.layers.dense(
                  dnn_input,
                  units=num_hidden_units,
                  activation=tf.nn.relu,
                  kernel_initializer=tf.glorot_uniform_initializer(),
                  name=dnn_layer_scope,
              )
  
              self._add_layer_summary(dnn_input, dnn_layer_scope.name)
      return dnn_input
  
imports: import time
  import argparse
  import tensorflow
  import os
  import sys
  import math
  import collections
  from tensorflow.python.client import timeline
  import json
  from tensorflow.python.ops import partitioned_variables
  import ray
  from bigdl.dllib.utils.log4Error import *
  from bigdl.orca import init_orca_context, stop_orca_context, OrcaContext
  from bigdl.orca.data.utils import process_spark_xshards
  from bigdl.orca.learn.utils import maybe_dataframe_to_xshards
  from bigdl.friesian.feature import FeatureTable
label_desc: Use image node_id 3 for calling the WDL obj's underlying member method code with example usage: obj._dnn(dnn_input, dnn_hidden_units, layer_name) and returns: dnn_input