class_docstr: Given an input shaped like `(batch_size, time_steps, [rest])` and a `Module` that takes
  inputs like `(batch_size, [rest])`, `TimeDistributed` reshapes the input to be
  `(batch_size * time_steps, [rest])`, applies the contained `Module`, then reshapes it back.
  
  Note that while the above gives shapes with `batch_size` first, this `Module` also works if
  `batch_size` is second - we always just combine the first two dimensions, then split them.
  
  It also reshapes keyword arguments unless they are not tensors or their name is specified in
  the optional `pass_through` iterable.
class_docstr_tok: ["Given","an","input","shaped","like","`","(","batch_size",",","time_steps",",","[","rest","]",")","`","and","a","`","Module","`","that","takes","inputs","like","`","(","batch_size",",","[","rest","]",")","`",",","`","TimeDistributed","`","reshapes","the","input","to","be","`","(","batch_size","*","time_steps",",","[","rest","]",")","`",",","applies","the","contained","`","Module","`",",","then","reshapes","it","back",".","Note","that","while","the","above","gives","shapes","with","`","batch_size","`","first",",","this","`","Module","`","also","works","if","`","batch_size","`","is","second","-","we","always","just","combine","the","first","two","dimensions",",","then","split","them",".","It","also","reshapes","keyword","arguments","unless","they","are","not","tensors","or","their","name","is","specified","in","the","optional","`","pass_through","`","iterable","."]
code: def __init__(self, module):
      super().__init__()
      self._module = module
  
imports: from typing import List
  import torch
label_desc: Use image node_id 1 to create a new TimeDistributed object from inherited base classes: torch.nn with example: obj = TimeDistributed(module)