docstr: Tests the tf.keras interface.
docstr_tok: ["Tests","the","tf.keras","interface","."]
code: def testKerasModel(self):
      """Tests the tf.keras interface."""
      dm_config = test_util.default_dm_config(
          per_cluster_buffer_size=1,
          distance_to_cluster_threshold=0.5,
          max_num_clusters=1,
          bootstrap_steps=0,
      )
      model = tf.keras.Sequential(
          [
              tf.keras.Input(shape=(2,), name="inputs"),
              tf.keras.layers.Dense(4),
              dn.DynamicNormalization(
                  dm_config,
                  mode=dm_ops.LOOKUP_WITH_UPDATE,
                  axis=1,
                  epsilon=0.1,
                  use_batch_normalization=True,
                  service_address=self._kbs_address,
              ),
              tf.keras.layers.Dense(1),
          ]
      )
      model.compile(optimizer="sgd", loss="mse")
  
      x_train = np.array([[1, 0], [0, 1], [1, 1], [0, 0]])
      y_train = np.array([1, 1, 0, 0])
      model.fit(x_train, y_train, epochs=10)
  
file_path: neural-structured-learning/research/carls/dynamic_normalization_test.py
imports: from research.carls import context
  from research.carls import dynamic_memory_ops
  from research.carls import dynamic_normalization
  from research.carls.testing import test_util
  import numpy
  import tensorflow
label_desc: Use image node_id 4 for calling the DynamicNormalizationTest obj's underlying member method code with example usage: obj.testKerasModel() without return types