# Codeblock 13 class SinusoidalEmbedding(nn.Module): def forward(self): pos = torch.arange(SEQ_LENGTH).reshape(SEQ_LENGTH, 1) print(f"pos\t\t: {pos.shape}") i = torch.arange(0, EMBED_DIM, 2) denominator = torch.pow(10000, i/EMBED_DIM) print(f"denominator\t: {denominator.shape}") even_pos_embed = torch.sin(pos/denominator) #(1) odd_pos_embed = torch.cos(pos/denominator) #(2) print(f"even_pos_embed\t: {even_pos_embed.shape}") stacked = torch.stack([even_pos_embed, odd_pos_embed], dim=2) #(3) print(f"stacked\t\t: {stacked.shape}") pos_embed = torch.flatten(stacked, start_dim=1, end_dim=2) #(4) print(f"pos_embed\t: {pos_embed.shape}") return pos_embed