code: def run(self, out, model_inputs, X):
      global tf, keras
  
      if not tf.executing_eagerly():
          feed_dict = dict(zip(model_inputs, X))
          if self.keras_phase_placeholder is not None:
              feed_dict[self.keras_phase_placeholder] = 0
          return self.session.run(out, feed_dict)
      else:
          # build inputs that are correctly shaped, typed, and tf-wrapped
          inputs = []
          for i in range(len(X)):
              shape = list(self.model_inputs[i].shape)
              shape[0] = -1
              v = tf.constant(
                  X[i].reshape(shape), dtype=self.model_inputs[i].dtype
              )
              inputs.append(v)
          return out(inputs)
  
imports: import warnings
  import numpy
  import pandas
  from packaging import version
  from .._explanation import Explanation
  from ..explainers._explainer import Explainer
  from ..explainers.tf_utils import _get_graph, _get_model_inputs, _get_model_output, _get_session
label_desc: Use image node_id 4 for calling the _TFGradient obj's underlying member method code with example usage: obj.run(out, model_inputs, X) and returns: self, out