class_docstr: Tacotron specific Prenet with an optional Batch Normalization.
  
  Note:
      Prenet with BN improves the model performance significantly especially
  if it is enabled after learning a diagonal attention alignment with the original
  prenet. However, if the target dataset is high quality then it also works from
  the start. It is also suggested to disable dropout if BN is in use.
  
      prenet_type == "original"
          x -> [linear -> ReLU -> Dropout]xN -> o
  
      prenet_type == "bn"
          x -> [linear -> BN -> ReLU -> Dropout]xN -> o
  
  Args:
      in_features (int): number of channels in the input tensor and the inner layers.
      prenet_type (str, optional): prenet type "original" or "bn". Defaults to "original".
      prenet_dropout (bool, optional): dropout rate. Defaults to True.
      out_features (list, optional): List of output channels for each prenet block.
          It also defines number of the prenet blocks based on the length of argument list.
          Defaults to [256, 256].
      bias (bool, optional): enable/disable bias in prenet linear layers. Defaults to True.
class_docstr_tok: ["Tacotron","specific","Prenet","with","an","optional","Batch","Normalization",".","Note",":","Prenet","with","BN","improves","the","model","performance","significantly","especially","if","it","is","enabled","after","learning","a","diagonal","attention","alignment","with","the","original","prenet",".","However",",","if","the","target","dataset","is","high","quality","then","it","also","works","from","the","start",".","It","is","also","suggested","to","disable","dropout","if","BN","is","in","use",".","prenet_type","==","``","original","''","x","-",">","[","linear","-",">","ReLU","-",">","Dropout","]","xN","-",">","o","prenet_type","==","``","bn","''","x","-",">","[","linear","-",">","BN","-",">","ReLU","-",">","Dropout","]","xN","-",">","o","Args",":","in_features","(","int",")",":","number","of","channels","in","the","input","tensor","and","the","inner","layers",".","prenet_type","(","str",",","optional",")",":","prenet","type","``","original","''","or","``","bn","''",".","Defaults","to","``","original","''",".","prenet_dropout","(","bool",",","optional",")",":","dropout","rate",".","Defaults","to","True",".","out_features","(","list",",","optional",")",":","List","of","output","channels","for","each","prenet","block",".","It","also","defines","number","of","the","prenet","blocks","based","on","the","length","of","argument","list",".","Defaults","to","[","256",",","256","]",".","bias","(","bool",",","optional",")",":","enable\/disable","bias","in","prenet","linear","layers",".","Defaults","to","True","."]
code: def forward(self, x):
      for linear in self.linear_layers:
          if self.prenet_dropout:
              x = F.dropout(
                  F.relu(linear(x)), p=0.5, training=self.training
              )
          else:
              x = F.relu(linear(x))
      return x
  
file_path: TTS/TTS/tts/layers/common_layers.py
imports: import torch
  from torch import nn
  from torch.nn import functional
label_desc: Use image node_id 2 for calling the Prenet obj's underlying member method code with example usage: obj.forward(x) and returns: x