class_docstr: Tacotron2 Encoder
  
  Args:
      in_out_channels (int): number of input and output channels.
  
  Shapes:
      - input: (B, C_in, T)
      - output: (B, C_in, T)
code: def __init__(self, in_out_channels=512):
      super(Encoder, self).__init__()
      self.convolutions = nn.ModuleList()
      for _ in range(3):
          self.convolutions.append(
              ConvBNBlock(in_out_channels, in_out_channels, 5, "relu")
          )
      self.lstm = nn.LSTM(
          in_out_channels,
          int(in_out_channels / 2),
          num_layers=1,
          batch_first=True,
          bias=True,
          bidirectional=True,
      )
      self.rnn_state = None
  
imports: import torch
  from torch import nn
  from torch.nn import functional
  from .common_layers import Prenet, Linear
  from .attentions import init_attn
label_desc: Use image node_id 1 to create a new Encoder object from inherited base classes: nn with example: obj = Encoder(in_out_channels)