class_docstr: Tacotron decoder.
  
  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_windowing (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.
      d_vector_dim (int): size of speaker embedding vector, for multi-speaker training.
      max_decoder_steps (int): Maximum number of steps allowed for the decoder. Defaults to 500.
class_docstr_tok: ["Tacotron","decoder",".","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_windowing","(","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",".","d_vector_dim","(","int",")",":","size","of","speaker","embedding","vector",",","for","multi-speaker","training",".","max_decoder_steps","(","int",")",":","Maximum","number","of","steps","allowed","for","the","decoder",".","Defaults","to","500","."]
docstr: Args:
      inputs: encoder outputs.
  Shapes:
      - inputs: batch x time x encoder_out_dim
docstr_tok: ["Args",":","inputs",":","encoder","outputs",".","Shapes",":","-","inputs",":","batch","x","time","x","encoder_out_dim"]
code: def inference(self, inputs):
      """
      Args:
          inputs: encoder outputs.
      Shapes:
          - inputs: batch x time x encoder_out_dim
      """
      outputs = []
      attentions = []
      stop_tokens = []
      t = 0
      self._init_states(inputs)
      self.attention.init_states(inputs)
      while True:
          if t > 0:
              new_memory = outputs[-1]
              self._update_memory_input(new_memory)
          output, stop_token, attention = self.decode(inputs, None)
          stop_token = torch.sigmoid(stop_token.data)
          outputs += [output]
          attentions += [attention]
          stop_tokens += [stop_token]
          t += 1
          if t > inputs.shape[1] / 4 and (
              stop_token > 0.6 or attention[:, -1].item() > 0.6
          ):
              break
          if t > self.max_decoder_steps:
              print("   | > Decoder stopped with 'max_decoder_steps")
              break
      return self._parse_outputs(outputs, attentions, stop_tokens)
  
imports: import torch
  from torch import nn
  from .attentions import init_attn
  from .common_layers import Prenet
label_desc: Use image node_id 9 for calling the Decoder obj's underlying member method code with example usage: obj.inference(inputs) and returns: self