A wrapper that unrolls the second (time) dimension of a tensor
into the first (batch) dimension, applies some other
and then rolls the time dimension back up.
Given an input shaped like
(batch_size, time_steps, [rest]) and a
Module that takes
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
TimeDistributed.forward(self, *inputs, pass_through:List[str]=None, **kwargs)
Defines the computation performed at every call.
Should be overridden by all subclasses.
Although the recipe for forward pass needs to be defined within
this function, one should call the :class:
Module instance afterwards
instead of this since the former takes care of running the
registered hooks while the latter silently ignores them.