class_docstr: Applies Maxout to the input.
  
  "Maxout Networks" Ian J. Goodfellow, David Warde-Farley, Mehdi Mirza, Aaron
  Courville, Yoshua Bengio. https://arxiv.org/abs/1302.4389
  
  Usually the operation is performed in the filter/channel dimension. This
  can also be used after Dense layers to reduce number of features.
  
  Args:
    num_units: Specifies how many features will remain after maxout
      in the `axis` dimension (usually channel).
      This must be a factor of number of features.
    axis: The dimension where max pooling will be performed. Default is the
      last dimension.
  
  Input shape:
    nD tensor with shape: `(batch_size, ..., axis_dim, ...)`.
  
  Output shape:
    nD tensor with shape: `(batch_size, ..., num_units, ...)`.
code: def call(self, inputs):
      inputs = tf.convert_to_tensor(inputs)
      shape = inputs.get_shape().as_list()
      # Dealing with batches with arbitrary sizes
      for i in range(len(shape)):
          if shape[i] is None:
              shape[i] = tf.shape(inputs)[i]
  
      num_channels = shape[self.axis]
      if (
          not isinstance(num_channels, tf.Tensor)
          and num_channels % self.num_units
      ):
          raise ValueError(
              "number of features({}) is not "
              "a multiple of num_units({})".format(
                  num_channels, self.num_units
              )
          )
  
      if self.axis < 0:
          axis = self.axis + len(shape)
      else:
          axis = self.axis
      assert axis >= 0, "Find invalid axis: {}".format(self.axis)
  
      expand_shape = shape[:]
      expand_shape[axis] = self.num_units
      k = num_channels // self.num_units
      expand_shape.insert(axis, k)
  
      outputs = tf.math.reduce_max(
          tf.reshape(inputs, expand_shape), axis, keepdims=False
      )
      return outputs
  
file_path: addons/tensorflow_addons/layers/maxout.py
imports: import tensorflow
  from typeguard import typechecked
label_desc: Use image node_id 2 for calling the Maxout obj's underlying member method code with example usage: obj.call(inputs) and returns: outputs