class_docstr: Tacotron2 decoder. We don't use Zoneout but Dropout between RNN layers.
  
  Args:
      in_channels (int): number of input channels.
      frame_channels (int): number of feature frame channels.
      r (int): number of outputs per time step (reduction rate).
      memory_size (int): size of the past window. if <= 0 memory_size = r
      attn_type (string): type of attention used in decoder.
      attn_win (bool): if true, define an attention window centered to maximum
          attention response. It provides more robust attention alignment especially
          at interence time.
      attn_norm (string): attention normalization function. 'sigmoid' or 'softmax'.
      prenet_type (string): 'original' or 'bn'.
      prenet_dropout (float): prenet dropout rate.
      forward_attn (bool): if true, use forward attention method. https://arxiv.org/abs/1807.06736
      trans_agent (bool): if true, use transition agent. https://arxiv.org/abs/1807.06736
      forward_attn_mask (bool): if true, mask attention values smaller than a threshold.
      location_attn (bool): if true, use location sensitive attention.
      attn_K (int): number of attention heads for GravesAttention.
      separate_stopnet (bool): if true, detach stopnet input to prevent gradient flow.
      max_decoder_steps (int): Maximum number of steps allowed for the decoder. Defaults to 10000.
docstr: Decoder inference without teacher forcing and use
  Stopnet to stop decoder.
  Args:
      inputs: Encoder outputs.
  
  Shapes:
      - inputs: (B, T, D_out_enc)
      - outputs: (B, T_mel, D_mel)
      - alignments: (B, T_in, T_out)
      - stop_tokens: (B, T_out)
docstr_tok: ["Decoder","inference","without","teacher","forcing","and","use","Stopnet","to","stop","decoder",".","Args",":","inputs",":","Encoder","outputs",".","Shapes",":","-","inputs",":","(","B",",","T",",","D_out_enc",")","-","outputs",":","(","B",",","T_mel",",","D_mel",")","-","alignments",":","(","B",",","T_in",",","T_out",")","-","stop_tokens",":","(","B",",","T_out",")"]
code: def inference(self, inputs):
      r"""Decoder inference without teacher forcing and use
      Stopnet to stop decoder.
      Args:
          inputs: Encoder outputs.
  
      Shapes:
          - inputs: (B, T, D_out_enc)
          - outputs: (B, T_mel, D_mel)
          - alignments: (B, T_in, T_out)
          - stop_tokens: (B, T_out)
      """
      memory = self.get_go_frame(inputs)
      memory = self._update_memory(memory)
  
      self._init_states(inputs, mask=None)
      self.attention.init_states(inputs)
  
      outputs, stop_tokens, alignments, t = [], [], [], 0
      while True:
          memory = self.prenet(memory)
          decoder_output, alignment, stop_token = self.decode(memory)
          stop_token = torch.sigmoid(stop_token.data)
          outputs += [decoder_output.squeeze(1)]
          stop_tokens += [stop_token]
          alignments += [alignment]
  
          if (
              stop_token > self.stop_threshold
              and t > inputs.shape[0] // 2
          ):
              break
          if len(outputs) == self.max_decoder_steps:
              print(
                  f"   > Decoder stopped with `max_decoder_steps` {self.max_decoder_steps}"
              )
              break
  
          memory = self._update_memory(decoder_output)
          t += 1
  
      outputs, stop_tokens, alignments = self._parse_outputs(
          outputs, stop_tokens, alignments
      )
  
      return outputs, alignments, stop_tokens
  
imports: import torch
  from torch import nn
  from torch.nn import functional
  from .attentions import init_attn
  from .common_layers import Linear, Prenet
label_desc: Use image node_id 10 for calling the Decoder obj's underlying member method code with example usage: obj.inference(inputs) and returns: outputs,  alignments,  stop_tokens