class_docstr: Wav2Letter model architecture from the `"Wav2Letter: an End-to-End ConvNet-based Speech Recognition System"
   <https://arxiv.org/abs/1609.03193>`_ paper.
   :math:`\text{padding} = \frac{\text{ceil}(\text{kernel} - \text{stride})}{2}`
  Args:
      num_classes (int, optional): Number of classes to be classified. (Default: ``40``)
      input_type (str, optional): Wav2Letter can use as input: ``waveform``, ``power_spectrum``
       or ``mfcc`` (Default: ``waveform``).
      num_features (int, optional): Number of input features that the network will receive (Default: ``1``).
class_docstr_tok: ["Wav2Letter","model","architecture","from","the","`","``","Wav2Letter",":","an","End-to-End","ConvNet-based","Speech","Recognition","System","''","<","https",":","\/\/arxiv.org\/abs\/1609.03193",">","`","_","paper",".",":","math",":","`","\\text","{","padding","}","=","\\frac","{","\\text","{","ceil","}","(","\\text","{","kernel","}","-","\\text","{","stride","}",")","}","{","2","}","`","Args",":","num_classes","(","int",",","optional",")",":","Number","of","classes","to","be","classified",".","(","Default",":","``","40","``",")","input_type","(","str",",","optional",")",":","Wav2Letter","can","use","as","input",":","``","waveform","``",",","``","power_spectrum","``","or","``","mfcc","``","(","Default",":","``","waveform","``",")",".","num_features","(","int",",","optional",")",":","Number","of","input","features","that","the","network","will","receive","(","Default",":","``","1","``",")","."]
code: def __init__(
      self,
      num_classes: int = 40,
      input_type: str = "waveform",
      num_features: int = 1,
  ) -> None:
      super().__init__()
  
      acoustic_num_features = (
          250 if input_type == "waveform" else num_features
      )
      acoustic_model = nn.Sequential(
          nn.Conv1d(
              in_channels=acoustic_num_features,
              out_channels=250,
              kernel_size=48,
              stride=2,
              padding=23,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=250,
              kernel_size=7,
              stride=1,
              padding=3,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=250,
              kernel_size=7,
              stride=1,
              padding=3,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=250,
              kernel_size=7,
              stride=1,
              padding=3,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=250,
              kernel_size=7,
              stride=1,
              padding=3,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=250,
              kernel_size=7,
              stride=1,
              padding=3,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=250,
              kernel_size=7,
              stride=1,
              padding=3,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=250,
              kernel_size=7,
              stride=1,
              padding=3,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=250,
              out_channels=2000,
              kernel_size=32,
              stride=1,
              padding=16,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=2000,
              out_channels=2000,
              kernel_size=1,
              stride=1,
              padding=0,
          ),
          nn.ReLU(inplace=True),
          nn.Conv1d(
              in_channels=2000,
              out_channels=num_classes,
              kernel_size=1,
              stride=1,
              padding=0,
          ),
          nn.ReLU(inplace=True),
      )
  
      if input_type == "waveform":
          waveform_model = nn.Sequential(
              nn.Conv1d(
                  in_channels=num_features,
                  out_channels=250,
                  kernel_size=250,
                  stride=160,
                  padding=45,
              ),
              nn.ReLU(inplace=True),
          )
          self.acoustic_model = nn.Sequential(
              waveform_model, acoustic_model
          )
  
      if input_type in ["power_spectrum", "mfcc"]:
          self.acoustic_model = acoustic_model
  
imports: import math
  from collections import OrderedDict
  from typing import Optional, Tuple
  import torch
  import torch.nn.functional
  from torch import nn, Tensor
label_desc: Use image node_id 1 to create a new Wav2Letter object from inherited base classes: nn with example: obj = Wav2Letter(num_classes, input_type, num_features)