class_docstr: Decodes the expanded phoneme encoding into spectrograms
  Args:
      out_channels (int): number of output channels.
      in_hidden_channels (int): input and hidden channels. Model keeps the input channels for the intermediate layers.
      decoder_type (str): decoder layer types. 'transformers' or 'residual_conv_bn'. Default 'residual_conv_bn'.
      decoder_params (dict): model parameters for specified decoder type.
      c_in_channels (int): number of channels for conditional input.
  
  Shapes:
      - input: (B, C, T)
class_docstr_tok: ["Decodes","the","expanded","phoneme","encoding","into","spectrograms","Args",":","out_channels","(","int",")",":","number","of","output","channels",".","in_hidden_channels","(","int",")",":","input","and","hidden","channels",".","Model","keeps","the","input","channels","for","the","intermediate","layers",".","decoder_type","(","str",")",":","decoder","layer","types",".","'transformers","'","or","'residual_conv_bn","'",".","Default","'residual_conv_bn","'",".","decoder_params","(","dict",")",":","model","parameters","for","specified","decoder","type",".","c_in_channels","(","int",")",":","number","of","channels","for","conditional","input",".","Shapes",":","-","input",":","(","B",",","C",",","T",")"]
code: def __init__(
      self,
      out_channels,
      in_hidden_channels,
      decoder_type="residual_conv_bn",
      decoder_params={
          "kernel_size": 4,
          "dilations": 4 * [1, 2, 4, 8] + [1],
          "num_conv_blocks": 2,
          "num_res_blocks": 17,
      },
      c_in_channels=0,
  ):
      super().__init__()
  
      if decoder_type.lower() == "relative_position_transformer":
          self.decoder = RelativePositionTransformerDecoder(
              in_channels=in_hidden_channels,
              out_channels=out_channels,
              hidden_channels=in_hidden_channels,
              params=decoder_params,
          )
      elif decoder_type.lower() == "residual_conv_bn":
          self.decoder = ResidualConv1dBNDecoder(
              in_channels=in_hidden_channels,
              out_channels=out_channels,
              hidden_channels=in_hidden_channels,
              params=decoder_params,
          )
      elif decoder_type.lower() == "wavenet":
          self.decoder = WaveNetDecoder(
              in_channels=in_hidden_channels,
              out_channels=out_channels,
              hidden_channels=in_hidden_channels,
              c_in_channels=c_in_channels,
              params=decoder_params,
          )
      elif decoder_type.lower() == "fftransformer":
          self.decoder = FFTransformerDecoder(
              in_hidden_channels, out_channels, decoder_params
          )
      else:
          raise ValueError(f"[!] Unknown decoder type - {decoder_type}")
  
imports: import torch
  from torch import nn
  from TTS.tts.layers.generic.res_conv_bn import Conv1dBN, Conv1dBNBlock, ResidualConv1dBNBlock
  from TTS.tts.layers.generic.transformer import FFTransformerBlock
  from TTS.tts.layers.generic.wavenet import WNBlocks
  from TTS.tts.layers.glow_tts.transformer import RelativePositionTransformer
label_desc: Use image node_id 1 to create a new Decoder object from inherited base classes: nn with example: obj = Decoder(out_channels, in_hidden_channels, decoder_type, decoder_params, c_in_channels)