
    ujh
                         d dl Z dgZ G d de j                  j                        Z G d de j                  j                        Zy)    N
DeepSpeechc                   r     e Zd ZdZddededededdf
 fdZd	ej                  dej                  fd
Z	 xZ
S )FullyConnectedzh
    Args:
        n_feature: Number of input features
        n_hidden: Internal hidden unit size.
    	n_featuren_hiddendropoutrelu_max_clipreturnNc                     t         t        |           t        j                  j                  ||d      | _        || _        || _        y )NT)bias)	superr   __init__torchnnLinearfcr	   r   )selfr   r   r   r	   	__class__s        Z/var/www/html/dev/engine/venv/lib/python3.12/site-packages/torchaudio/models/deepspeech.pyr   zFullyConnected.__init__   s9    nd,.((//)XD/A*    xc                 z   | j                  |      }t        j                  j                  j	                  |      }t        j                  j                  j                  |d| j                        }| j                  r?t        j                  j                  j                  || j                  | j                        }|S )Nr   )	r   r   r   
functionalreluhardtanhr	   r   training)r   r   s     r   forwardzFullyConnected.forward   s    GGAJHH$$Q'HH((At/A/AB<<##++At||T]]KAr   )   __name__
__module____qualname____doc__intfloatr   r   Tensorr   __classcell__r   s   @r   r   r      sM    #  u UX bf  %,, r   r   c                   x     e Zd ZdZ	 	 	 ddededededdf
 fdZd	ej                  dej                  fd
Z	 xZ
S )r   a  DeepSpeech architecture introduced in
    *Deep Speech: Scaling up end-to-end speech recognition* :cite:`hannun2014deep`.

    Args:
        n_feature: Number of input features
        n_hidden: Internal hidden unit size.
        n_class: Number of output classes
    r   r   n_classr   r
   Nc                 d   t         t        |           || _        t	        |||      | _        t	        |||      | _        t	        |||      | _        t        j                  j                  ||ddd      | _        t	        |||      | _        t        j                  j                  ||      | _        y )N   r   T)
num_layersnonlinearitybidirectional)r   r   r   r   r   fc1fc2fc3r   r   RNNbi_rnnfc4r   out)r   r   r   r*   r   r   s        r   r   zDeepSpeech.__init__&   s     	j$(* !)Xw?!(Hg>!(Hg>hhll8X!RXhllm!(Hg>88??8W5r   r   c                    | j                  |      }| j                  |      }| j                  |      }|j                  d      }|j	                  dd      }| j                  |      \  }}|ddddd| j                  f   |dddd| j                  df   z   }| j                  |      }| j                  |      }|j                  ddd      }t        j                  j                  j                  |d      }|S )z
        Args:
            x (torch.Tensor): Tensor of dimension (batch, channel, time, feature).
        Returns:
            Tensor: Predictor tensor of dimension (batch, time, class).
        r,   r   N   )dim)r0   r1   r2   squeeze	transposer4   r   r5   r6   permuter   r   r   log_softmax)r   r   _s      r   r   zDeepSpeech.forward6   s     HHQKHHQKHHQKIIaLKK1{{1~1aOdmmO#$qAt}})>'??HHQKHHQKIIaAHH++A1+5r   )i   (   g        r   r(   s   @r   r   r      sc     66 6 	6
 6 
6  %,, r   )r   __all__r   Moduler   r    r   r   <module>rC      s7    .UXX__ ,8 8r   