Pass the input through the encoder in turn. Args: enc_inputs: the sequence to the encoder (required). [batch_size, src_len]
(self, enc_inputs)
| 276 | self.layers.append(TransformerEncoderLayer(d_model=d_model, n_head=n_head, dim_feedforward=dim_feedforward)) |
| 277 | |
| 278 | def forward(self, enc_inputs): |
| 279 | """Pass the input through the encoder in turn. |
| 280 | Args: |
| 281 | enc_inputs: the sequence to the encoder (required). [batch_size, src_len] |
| 282 | """ |
| 283 | # [batch_size, src_len, d_model] |
| 284 | word_emb = self.input_emb(enc_inputs) |
| 285 | |
| 286 | self.pos_emb.initialize(enc_inputs) |
| 287 | self.pos_emb.from_pretrained(W=TransformerEncoder._get_sinusoid_encoding_table(self.src_n_token, self.d_model), freeze=True) |
| 288 | # [batch_size, src_len, d_model] |
| 289 | pos_emb = self.pos_emb(enc_inputs) |
| 290 | # enc_outputs [batch_size, src_len, d_model] |
| 291 | enc_outputs = autograd.add(word_emb, pos_emb) |
| 292 | |
| 293 | # enc_self_attn_mask [batch_size, src_len, src_len] |
| 294 | enc_self_attn_mask = TransformerEncoder._get_attn_pad_mask(enc_inputs, enc_inputs) |
| 295 | |
| 296 | enc_self_attns = [] |
| 297 | for layer in self.layers: |
| 298 | enc_outputs, enc_self_attn = layer(enc_outputs, enc_self_attn_mask) |
| 299 | enc_self_attns.append(enc_self_attn) |
| 300 | return enc_outputs, enc_self_attns |
| 301 | |
| 302 | @staticmethod |
| 303 | def _get_attn_pad_mask(seq_q, seq_k): |
nothing calls this directly
no test coverage detected