def __init__(self,
                 embedding_layer, n_layers, n_heads, d_model, d_filter, dropout = None) -> None:
        super(TransformerEncoder, self).__init__()

        self.embedding_layer = embedding_layer
        # The encoding stack is a stack of transformer encoder blocks
        self.encoding_stack = Stack([TransformerEncoderBlock(n_heads, d_filter, d_model, dropout)
                                     for _ in range(n_layers)],
                                    name='encoder_stack')
 def __init__(self,
              embedding_layer,
              output_layer,
              n_layers,
              n_heads,
              d_model,
              d_filter,
              dropout = None) -> None:
     super().__init__()
     self.embedding_layer = embedding_layer
     self.decoding_stack = Stack([TransformerDecoderBlock(n_heads, d_filter, d_model, dropout)
                                  for _ in range(n_layers)],
                                 name='decoder_blocks')
     self.output_layer = output_layer