o
    %ݫi                     @   sB   d Z ddlZddlmZ ddlmZ eeZG dd dejZ	dS )z?Library implementing dropout.

Authors
 * Mirco Ravanelli 2020
    N)
get_loggerc                       s*   e Zd ZdZd fdd	Zdd Z  ZS )	Dropout2da  This function implements dropout 2d. It randomly put zeros on
    entire channels.

    Arguments
    ---------
    drop_rate : float
        It is the dropout factor (between 0 and 1).
    inplace : bool
        If True, it uses inplace operations.

    Example
    -------
    >>> drop = Dropout2d(drop_rate=0.5)
    >>> inputs = torch.rand(10, 50, 40)
    >>> output=drop(inputs)
    >>> output.shape
    torch.Size([10, 50, 40])
    Fc                    s.   t    || _|| _tj| j| jd| _d S )N)pinplace)super__init__	drop_rater   nnr   drop)selfr   r   	__class__ L/home/ubuntu/.local/lib/python3.10/site-packages/speechbrain/nnet/dropout.pyr   #   s   
zDropout2d.__init__c                 C   s6   | dd dd}| |}| dd dd}|S )a9  Applies dropout 2d to the input tensor.

        Arguments
        ---------
        x : torch.Tensor (batch, time, channel1, channel2)
            input to normalize. 4d tensors are expected.

        Returns
        -------
        x_drop : torch.Tensor
            The tensor with channels zeroed out.
              )	transposer
   )r   xx_dropr   r   r   forward)   s   
zDropout2d.forward)F)__name__
__module____qualname____doc__r   r   __classcell__r   r   r   r   r      s    r   )
r   torchtorch.nnr	   speechbrain.utils.loggerr   r   loggerModuler   r   r   r   r   <module>   s    