def __init__(self, n_heads, embedding_size, ffn_size, attention_dropout=0.0, relu_dropout=0.0):
    super().__init__()
    self.dim = embedding_size
    self.ffn_dim = ffn_size
    self.attention = MultiHeadAttention(n_heads, embedding_size, dropout=attention_dropout)
    self.norm1 = nn.LayerNorm(embedding_size)
    self.ffn = TransformerFFN(embedding_size, ffn_size, dropout=relu_dropout)
    self.norm2 = nn.LayerNorm(embedding_size)
def __init__(self, n_heads, embedding_size, ffn_size, attention_dropout=0.0, relu_dropout=0.0):
    super().__init__()
    self.dim = embedding_size
    self.ffn_dim = ffn_size
    self.attention = MultiHeadAttention(n_heads, embedding_size, dropout=attention_dropout)
    self.norm1 = nn.LayerNorm(embedding_size)
    self.ffn = TransformerFFN(embedding_size, ffn_size, dropout=relu_dropout)
    self.norm2 = nn.LayerNorm(embedding_size)