Forward pass: token_ids [batch, seq] -> [batch, seq, feat_dim].
(&self, token_ids: &Tensor)
| 78 | |
| 79 | /// Forward pass: token_ids [batch, seq] -> [batch, seq, feat_dim]. |
| 80 | pub fn forward(&self, token_ids: &Tensor) -> Result<Tensor> { |
| 81 | let x = self.backend.embedding(token_ids, &self.embed_weight)?; |
| 82 | let x = self.backend.linear_forward(&x, &self.in_proj_weight, self.in_proj_bias.as_ref())?; |
| 83 | |
| 84 | let seq_len = x.dim(1)?; |
| 85 | let pos_emb = self.make_pos_emb(seq_len, x.device(), x.dtype())?; |
| 86 | |
| 87 | let mut x = x; |
| 88 | for layer in &self.layers { |
| 89 | x = layer.forward(&x, &pos_emb, None)?; |
| 90 | } |
| 91 | |
| 92 | let x = self.backend.linear_forward(&x, &self.out_proj_weight, self.out_proj_bias.as_ref())?; |
| 93 | Ok(x) |
| 94 | } |
| 95 | |
| 96 | /// Create CompactRelPositionalEncoding [1, 2*seq-1, pos_dim]. |
| 97 | fn make_pos_emb(&self, seq_len: usize, device: &Device, dtype: DType) -> Result<Tensor> { |
nothing calls this directly
no test coverage detected