code: def train_step(self, data):
      x, y = data
  
      with tf.GradientTape() as tape:
          y_pred = self(x, training=True)  # Forward pass
          # Compute our own loss
          loss = self.loss_fn(y, y_pred)
  
      # Compute gradients
      trainable_vars = self.trainable_variables
      gradients = tape.gradient(loss, trainable_vars)
  
      # Update weights
      self.optimizer.apply(gradients, trainable_vars)
  
      # Compute our own metrics
      self.loss_tracker.update_state(loss)
      self.mae_metric.update_state(y, y_pred)
      return {
          "loss": self.loss_tracker.result(),
          "mae": self.mae_metric.result(),
      }
  
imports: import os
  import tensorflow
  import keras
  from keras import layers
  import numpy
label_desc: Use image node_id 2 for calling the CustomModel obj's underlying member method code with example usage: obj.train_step(data) and returns: dict