class_docstr: Apply SpecAugment to a Spectrogram. For more info, check the original paper at:
  https://arxiv.org/abs/1904.08779
  
  Args:
      freq_mask_param (`int`): Frequency Mask Parameter (F in the paper)
      time_mask_param (ìnt`): Time Mask Parameter (T in the paper)
      n_freq_masks (`int`): Number of frequency masks to apply (mF in the paper). By default is 1.
      n_time_masks (`int`): Number of time masks to apply (mT in the paper). By default is 1.
      mask_value (`float`): Value of the applied masks. By default is 0.
      data_format (`str`): specifies the data format of batch input/output
      **kwargs: Keyword args for the parent keras layer (e.g., `name`)
  
  Example:
      ::
  
          input_shape = (2048, 1)  # mono signal
  
          # We compute the Mel Spectrogram of the input signal
          melgram = kapre.composed.get_melspectrogram_layer(input_shape=input_shape,
                                                n_fft=1024,
                                                return_decibel=True,
                                                n_mels=256,
                                                input_data_format='channels_last',
                                                output_data_format='channels_last')
  
  
          # Now we define the SpecAugment layer. It will apply 5 masks in the frequency axis,
          # 3 masks in the time axis. The frequency mask param is 5 and the time mask param
          # is 10.
          spec_augment = SpecAugment(freq_mask_param=5,
                                     time_mask_param=10,
                                     n_freq_masks=5,
                                     n_time_masks=3)
  
          model = Sequential()
          model.add(melgram)
  
          # Add the spec_augment layer for augmentation
          model.add(spec_augment)
      ::
class_docstr_tok: ["Apply","SpecAugment","to","a","Spectrogram",".","For","more","info",",","check","the","original","paper","at",":","https",":","\/\/arxiv.org\/abs\/1904.08779","Args",":","freq_mask_param","(","`","int","`",")",":","Frequency","Mask","Parameter","(","F","in","the","paper",")","time_mask_param","(","\u00ecnt","`",")",":","Time","Mask","Parameter","(","T","in","the","paper",")","n_freq_masks","(","`","int","`",")",":","Number","of","frequency","masks","to","apply","(","mF","in","the","paper",")",".","By","default","is","1.","n_time_masks","(","`","int","`",")",":","Number","of","time","masks","to","apply","(","mT","in","the","paper",")",".","By","default","is","1.","mask_value","(","`","float","`",")",":","Value","of","the","applied","masks",".","By","default","is","0.","data_format","(","`","str","`",")",":","specifies","the","data","format","of","batch","input\/output","*","*","kwargs",":","Keyword","args","for","the","parent","keras","layer","(","e.g.",",","`","name","`",")","Example",":",":",":","input_shape","=","(","2048",",","1",")","#","mono","signal","#","We","compute","the","Mel","Spectrogram","of","the","input","signal","melgram","=","kapre.composed.get_melspectrogram_layer","(","input_shape=input_shape",",","n_fft=1024",",","return_decibel=True",",","n_mels=256",",","input_data_format='channels_last","'",",","output_data_format='channels_last","'",")","#","Now","we","define","the","SpecAugment","layer",".","It","will","apply","5","masks","in","the","frequency","axis",",","#","3","masks","in","the","time","axis",".","The","frequency","mask","param","is","5","and","the","time","mask","param","#","is","10.","spec_augment","=","SpecAugment","(","freq_mask_param=5",",","time_mask_param=10",",","n_freq_masks=5",",","n_time_masks=3",")","model","=","Sequential","(",")","model.add","(","melgram",")","#","Add","the","spec_augment","layer","for","augmentation","model.add","(","spec_augment",")",":",":"]
docstr: Applies a number of masks (defined by the parameter n_masks) to the spectrogram
  by the axis provided.
  Args:
      x (float `Tensor`): A spectrogram. Its shape is (time, freq, ch) or (ch, time, freq)
              depending on data_format.
      axis (int): The axis where the masks will be applied
      mask_param (int): The mask param as defined in the original paper, which is the max width of the mask
              applied to the specified axis.
      n_masks (int): The number of masks to be applied
  
  Returns:
      (float `Tensor`): The masked spectrogram. Its shape is (time, freq, ch) or (ch, time, freq)
          depending on x shape (that is, the input spectrogram).
docstr_tok: ["Applies","a","number","of","masks","(","defined","by","the","parameter","n_masks",")","to","the","spectrogram","by","the","axis","provided",".","Args",":","x","(","float","`","Tensor","`",")",":","A","spectrogram",".","Its","shape","is","(","time",",","freq",",","ch",")","or","(","ch",",","time",",","freq",")","depending","on","data_format",".","axis","(","int",")",":","The","axis","where","the","masks","will","be","applied","mask_param","(","int",")",":","The","mask","param","as","defined","in","the","original","paper",",","which","is","the","max","width","of","the","mask","applied","to","the","specified","axis",".","n_masks","(","int",")",":","The","number","of","masks","to","be","applied","Returns",":","(","float","`","Tensor","`",")",":","The","masked","spectrogram",".","Its","shape","is","(","time",",","freq",",","ch",")","or","(","ch",",","time",",","freq",")","depending","on","x","shape","(","that","is",",","the","input","spectrogram",")","."]
code: def _apply_masks_to_axis(self, x, axis, mask_param, n_masks):
      """
      Applies a number of masks (defined by the parameter n_masks) to the spectrogram
      by the axis provided.
      Args:
          x (float `Tensor`): A spectrogram. Its shape is (time, freq, ch) or (ch, time, freq)
                  depending on data_format.
          axis (int): The axis where the masks will be applied
          mask_param (int): The mask param as defined in the original paper, which is the max width of the mask
                  applied to the specified axis.
          n_masks (int): The number of masks to be applied
  
      Returns:
          (float `Tensor`): The masked spectrogram. Its shape is (time, freq, ch) or (ch, time, freq)
              depending on x shape (that is, the input spectrogram).
      """
      axis_limit = K.int_shape(x)[axis]
      axis_indices = tf.range(axis_limit)
  
      if axis == 0:
          axis_indices = tf.reshape(axis_indices, (-1, 1, 1))
      elif axis == 1:
          axis_indices = tf.reshape(axis_indices, (1, -1, 1))
      elif axis == 2:
          axis_indices = tf.reshape(axis_indices, (1, 1, -1))
      else:
          raise NotImplementedError(
              f"Axis parameter must be one of the following: 0, 1, 2"
          )
  
      # Check if mask_width is greater than axis_limit
      if axis_limit < mask_param:
          raise ValueError(
              "Time and freq axis shapes must be greater than time_mask_param "
              "and freq_mask_param respectively"
          )
  
      x_repeated = tf.repeat(tf.expand_dims(x, 0), n_masks, axis=0)
      axis_limit_repeated = tf.repeat(axis_limit, n_masks, axis=0)
      axis_indices_repeated = tf.repeat(
          tf.expand_dims(axis_indices, 0), n_masks, axis=0
      )
      mask_param_repeated = tf.repeat(mask_param, n_masks, axis=0)
  
      masks = tf.map_fn(
          elems=(
              x_repeated,
              axis_limit_repeated,
              axis_indices_repeated,
              mask_param_repeated,
          ),
          fn=self._generate_axis_mask,
          dtype=(tf.float32, tf.int32, tf.int32, tf.int32),
          fn_output_signature=tf.bool,
      )
  
      mask = tf.math.reduce_any(masks, 0)
      return tf.where(mask, self.mask_value, x)
  
file_path: kapre/kapre/augmentation.py
imports: import tensorflow
  from tensorflow.keras.layers import Layer
  from tensorflow.keras import backend
  from .None import backend
  from .backend import _CH_FIRST_STR, _CH_LAST_STR, _CH_DEFAULT_STR
  import numpy
label_desc: Use image node_id 3 for calling the SpecAugment obj's underlying member method code with example usage: obj._apply_masks_to_axis(x, axis, mask_param, n_masks) and returns: tf