tiny-transformers / src /transformer /positional_embedding.py
zeguru's picture
Upload folder using huggingface_hub
98d1e65 verified
Raw History Blame Contribute Delete
912 Bytes
"""
Positional embedding layer.
Converts token positions into learnable embedding vectors.
"""
import torch
import torch.nn as nn
class PositionalEmbedding(nn.Module):
"""
Learned positional embeddings.
Input:
token_ids: (batch_size, context_length)
Output:
(batch_size, context_length, d_model)
"""
def __init__(self, context_length: int, d_model: int):
super().__init__()
self.embedding = nn.Embedding(
num_embeddings=context_length,
embedding_dim=d_model
)
def forward(self, token_ids: torch.Tensor) -> torch.Tensor:
batch_size, context_length = token_ids.shape
positions = torch.arange(
context_length,
device=token_ids.device
)
positions = positions.unsqueeze(0).expand(batch_size, context_length)
return self.embedding(positions)