class_docstr: A PyTorch module for the Decoder part of DAC.
  
  Parameters
  ----------
  input_channel : int
      The number of channels in the input tensor.
  channels : int
      The base number of channels for the convolutional layers.
  rates : list
      A list of stride rates for each decoder block
  d_out: int
      The out dimension of the final conv layer, Default is 1.
  
  Example
  -------
  Creating a Decoder instance
  
  >>> decoder = Decoder(256, 1536,  [8, 8, 4, 2])
  >>> discrete_embeddings = torch.randn(2, 256, 200) # Example shape: [Batch, Channels, Time]
  >>> recovered_audio = decoder(discrete_embeddings)
  
  Using a pretrained decoder. Note that the actual input should be proper discrete representation.
  Using randomly generated input here for illustration of use.
  
  >>> dac = DAC(load_pretrained=True, model_type="44KHz", model_bitrate="8kbps", tag="latest")
  >>> decoder = dac.decoder
  >>> discrete_embeddings = torch.randn(1, 1024, 500) # Example shape: [Batch, Channels, Time]
  >>> recovered_audio = decoder(discrete_embeddings)
class_docstr_tok: ["A","PyTorch","module","for","the","Decoder","part","of","DAC",".","Parameters","--","--","--","--","--","input_channel",":","int","The","number","of","channels","in","the","input","tensor",".","channels",":","int","The","base","number","of","channels","for","the","convolutional","layers",".","rates",":","list","A","list","of","stride","rates","for","each","decoder","block","d_out",":","int","The","out","dimension","of","the","final","conv","layer",",","Default","is","1",".","Example","--","--","--","-","Creating","a","Decoder","instance",">",">",">","decoder","=","Decoder","(","256",",","1536",",","[","8",",","8",",","4",",","2","]",")",">",">",">","discrete_embeddings","=","torch.randn","(","2",",","256",",","200",")","#","Example","shape",":","[","Batch",",","Channels",",","Time","]",">",">",">","recovered_audio","=","decoder","(","discrete_embeddings",")","Using","a","pretrained","decoder",".","Note","that","the","actual","input","should","be","proper","discrete","representation",".","Using","randomly","generated","input","here","for","illustration","of","use",".",">",">",">","dac","=","DAC","(","load_pretrained=True",",","model_type=","''","44KHz","''",",","model_bitrate=","''","8kbps","''",",","tag=","''","latest","''",")",">",">",">","decoder","=","dac.decoder",">",">",">","discrete_embeddings","=","torch.randn","(","1",",","1024",",","500",")","#","Example","shape",":","[","Batch",",","Channels",",","Time","]",">",">",">","recovered_audio","=","decoder","(","discrete_embeddings",")"]
docstr: Parameters
  ----------
  x : torch.tensor
  
  Returns
  -------
  torch.tensor
docstr_tok: ["Parameters","--","--","--","--","--","x",":","torch.tensor","Returns","--","--","--","-","torch.tensor"]
code: def forward(self, x):
      """
  
      Parameters
      ----------
      x : torch.tensor
  
      Returns
      -------
      torch.tensor
      """
      return self.model(x)
  
imports: import math
  from pathlib import Path
  from typing import List, Union
  import logging
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from torch.nn.utils.parametrizations import weight_norm
label_desc: Use image node_id 2 for calling the Decoder obj's underlying member method code with example usage: obj.forward(x) and returns: self