positional_encoding
allennlp.modules.transformer.positional_encoding
SinusoidalPositionalEncoding¶
class SinusoidalPositionalEncoding(torch.nn.Module, FromParams):
| def __init__(
| self,
| min_timescale: float = 1.0,
| max_timescale: float = 1.0e4
| )
Implements the frequency-based positional encoding described in Attention is All you Need.
Adds sinusoids of different frequencies to a Tensor
. A sinusoid of a
different frequency and phase is added to each dimension of the input Tensor
.
This allows the attention heads to use absolute and relative positions.
The number of timescales is equal to hidden_dim / 2 within the range (min_timescale, max_timescale). For each timescale, the two sinusoidal signals sin(timestep / timescale) and cos(timestep / timescale) are generated and concatenated along the hidden_dim dimension.
Parameters¶
- tensor :
torch.Tensor
a Tensor with shape (batch_size, timesteps, hidden_dim). - min_timescale :
float
, optional (default =1.0
)
The smallest timescale to use. - max_timescale :
float
, optional (default =1.0e4
)
The largest timescale to use.
Returns¶
torch.Tensor
The input tensor augmented with the sinusoidal frequencies.
forward¶
class SinusoidalPositionalEncoding(torch.nn.Module, FromParams):
| ...
| def forward(self, input_tensor: torch.Tensor)
Adds a positional encoding to input_tensor
.