class_docstr: An implementation of `Model` that wraps a Keras model. It
  specifically exposes the hidden features of a model by creating new models.
  The symbolic graph is reused and so there is little overhead. Splitting
  in-place operations can incur an overhead.
class_docstr_tok: ["An","implementation","of","`","Model","`","that","wraps","a","Keras","model",".","It","specifically","exposes","the","hidden","features","of","a","model","by","creating","new","models",".","The","symbolic","graph","is","reused","and","so","there","is","little","overhead",".","Splitting","in-place","operations","can","incur","an","overhead","."]
docstr: Looks for the name of the softmax layer.
  :return: Softmax layer name
docstr_tok: ["Looks","for","the","name","of","the","softmax","layer",".",":","return",":","Softmax","layer","name"]
code: def _get_softmax_name(self):
      """
      Looks for the name of the softmax layer.
      :return: Softmax layer name
      """
      for layer in self.model.layers:
          cfg = layer.get_config()
          if "activation" in cfg and cfg["activation"] == "softmax":
              return layer.name
  
      raise Exception("No softmax layers found")
  
file_path: cleverhans/cleverhans_v3.1.0/cleverhans/utils_keras.py
imports: from distutils.version import LooseVersion
  import warnings
  import tensorflow
  from .model import Model, NoSuchLayerError
label_desc: Use image node_id 2 for calling the KerasModelWrapper obj's underlying member method code with example usage: obj._get_softmax_name() and returns: layer