import torch.nn as nn import torch vocab_size = tokenizer.vocab_size d_model = 256 n_segments = 2 class Embedding(nn.Module): def __init__(self): super(Embedding, self).__init__() self.tok_embed = nn.Embedding(vocab_size, d_model) # token embedding self.pos_embed = nn.Embedding(max_input_length, d_model) # position embedding self.seg_embed = nn.Embedding(n_segments, d_model) # segment(token type) embedding self.norm = nn.LayerNorm(d_model) def forward(self, x, seg): seq_len = x.size(1) pos = torch.arange(seq_len, dtype=torch.long).to(device) pos = pos.unsqueeze(0).expand_as(x) # (seq_len,) -> (batch_size, seq_len) embedding = self.tok_embed(x) + self.pos_embed(pos) + self.seg_embed(seg) return self.norm(embedding) e = Embedding() e.to(device)