class_docstr: Variational Dropout LSTM.
  相关论文参考：`A Theoretically Grounded Application of Dropout in Recurrent Neural Networks (Yarin Gal and Zoubin Ghahramani, 2016) <https://arxiv.org/abs/1512.05287>`_
  
  :param input_size:  输入 `x` 的特征维度。
  :param hidden_size: 隐状态 `h` 的特征维度。
  :param num_layers: rnn的层数，默认为 1。
  :param bias: 如果为 ``False``，模型将不会使用bias。默认为 ``True``。
  :param batch_first: 若为 ``True``，输入和输出 ``Tensor`` 形状为
      ``[batch_size, seq, feature]``，否则为 ``[seq, batch_size, feature]``。
  :param input_dropout: 对输入的 dropout 概率。默认为 0。
  :param hidden_dropout: 对每个隐状态的 dropout 概率。默认为 0。
  :param bidirectional: 若为 ``True``，用双向的 LSTM。默认为 ``False``。
class_docstr_tok: ["Variational","Dropout","LSTM",".","\u76f8\u5173\u8bba\u6587\u53c2\u8003\uff1a","`","A","Theoretically","Grounded","Application","of","Dropout","in","Recurrent","Neural","Networks","(","Yarin","Gal","and","Zoubin","Ghahramani",",","2016",")","<","https",":","\/\/arxiv.org\/abs\/1512.05287",">","`","_",":","param","input_size",":","\u8f93\u5165","`","x","`","\u7684\u7279\u5f81\u7ef4\u5ea6\u3002",":","param","hidden_size",":","\u9690\u72b6\u6001","`","h","`","\u7684\u7279\u5f81\u7ef4\u5ea6\u3002",":","param","num_layers",":","rnn\u7684\u5c42\u6570\uff0c\u9ed8\u8ba4\u4e3a","1\u3002",":","param","bias",":","\u5982\u679c\u4e3a","``","False","``","\uff0c\u6a21\u578b\u5c06\u4e0d\u4f1a\u4f7f\u7528bias\u3002\u9ed8\u8ba4\u4e3a","``","True","``","\u3002",":","param","batch_first",":","\u82e5\u4e3a","``","True","``","\uff0c\u8f93\u5165\u548c\u8f93\u51fa","``","Tensor","``","\u5f62\u72b6\u4e3a","``","[","batch_size",",","seq",",","feature","]","``","\uff0c\u5426\u5219\u4e3a","``","[","seq",",","batch_size",",","feature","]","``","\u3002",":","param","input_dropout",":","\u5bf9\u8f93\u5165\u7684","dropout","\u6982\u7387\u3002\u9ed8\u8ba4\u4e3a","0\u3002",":","param","hidden_dropout",":","\u5bf9\u6bcf\u4e2a\u9690\u72b6\u6001\u7684","dropout","\u6982\u7387\u3002\u9ed8\u8ba4\u4e3a","0\u3002",":","param","bidirectional",":","\u82e5\u4e3a","``","True","``","\uff0c\u7528\u53cc\u5411\u7684","LSTM\u3002\u9ed8\u8ba4\u4e3a","``","False","``","\u3002"]
docstr: :param x: 输入序列 ``[batch_size, seq_len, input_size]``。
  :param hx: 初始隐状态 ``[batch_size, hidden_size]``，若为 ``None`` 则初始化为全 **1** 向量。
  :return: ``(output, ht)`` 格式的结果: ``output`` 形状为 ``[batch_size, seq_len, hidden_size*num_direction]``，
      表示输出序列，``ht`` 形状为 ``[batch_size, hidden_size*num_direction]``，表示最后时刻隐状态。
docstr_tok: [":","param","x",":","\u8f93\u5165\u5e8f\u5217","``","[","batch_size",",","seq_len",",","input_size","]","``","\u3002",":","param","hx",":","\u521d\u59cb\u9690\u72b6\u6001","``","[","batch_size",",","hidden_size","]","``","\uff0c\u82e5\u4e3a","``","None","``","\u5219\u521d\u59cb\u5316\u4e3a\u5168","*","*","1","*","*","\u5411\u91cf\u3002",":","return",":","``","(","output",",","ht",")","``","\u683c\u5f0f\u7684\u7ed3\u679c",":","``","output","``","\u5f62\u72b6\u4e3a","``","[","batch_size",",","seq_len",",","hidden_size","*","num_direction","]","``","\uff0c","\u8868\u793a\u8f93\u51fa\u5e8f\u5217\uff0c","``","ht","``","\u5f62\u72b6\u4e3a","``","[","batch_size",",","hidden_size","*","num_direction","]","``","\uff0c\u8868\u793a\u6700\u540e\u65f6\u523b\u9690\u72b6\u6001\u3002"]
code: def forward(self, x, hx=None):
      """
      :param x: 输入序列 ``[batch_size, seq_len, input_size]``。
      :param hx: 初始隐状态 ``[batch_size, hidden_size]``，若为 ``None`` 则初始化为全 **1** 向量。
      :return: ``(output, ht)`` 格式的结果: ``output`` 形状为 ``[batch_size, seq_len, hidden_size*num_direction]``，
          表示输出序列，``ht`` 形状为 ``[batch_size, hidden_size*num_direction]``，表示最后时刻隐状态。
      """
      return super(VarLSTM, self).forward(x, hx)
  
imports: import torch
  import torch.nn
  from torch.nn.utils.rnn import PackedSequence, pack_padded_sequence, pad_packed_sequence
label_desc: Use image node_id 2 for calling the VarLSTM obj's underlying member method code with example usage: obj.forward(x, hx) and returns: super