class_docstr: Specifies the rank, dtype and shape of every input to a layer.
  
  Layers can expose (if appropriate) an `input_spec` attribute:
  an instance of `InputSpec`, or a nested structure of `InputSpec` instances
  (one per input tensor). These objects enable the layer to run input
  compatibility checks for input structure, input rank, input shape, and
  input dtype for the first argument of `Layer.__call__`.
  
  A `None` entry in a shape is compatible with any dimension.
  
  Args:
      dtype: Expected DataType of the input.
      shape: Shape tuple, expected shape of the input
          (may include None for unchecked axes). Includes the batch size.
      ndim: Integer, expected rank of the input.
      max_ndim: Integer, maximum rank of the input.
      min_ndim: Integer, minimum rank of the input.
      axes: Dictionary mapping integer axes to
          a specific dimension value.
      allow_last_axis_squeeze: If True, then allow inputs of rank N+1 as long
          as the last axis of the input is 1, as well as inputs of rank N-1
          as long as the last axis of the spec is 1.
      name: Expected key corresponding to this input when passing data as
          a dictionary.
  
  Example:
  
  ```python
  class MyLayer(Layer):
      def __init__(self):
          super(MyLayer, self).__init__()
          # The layer will accept inputs with
          # shape (*, 28, 28) & (*, 28, 28, 1)
          # and raise an appropriate error message otherwise.
          self.input_spec = InputSpec(
              shape=(None, 28, 28, 1),
              allow_last_axis_squeeze=True)
  ```
code: def from_config(cls, config):
      return cls(**config)
  
file_path: keras/keras/layers/input_spec.py
imports: import tree
  from keras import backend
  from keras.api_export import keras_export
label_desc: Use image node_id 4 for calling the InputSpec obj's underlying member method code with example usage: obj.from_config(cls, config) and returns: cls