class_docstr: Self-attention for lm tokens and text. 
class_docstr_tok: ["Self-attention","for","lm","tokens","and","text","."]
code: def __init__(self, n_text_channels=384, n_lm_tokens_channels=128):
      super().__init__()
  
      self.text_pos_emb = PositionalEmbedding(n_text_channels)
      self.lm_pos_emb = PositionalEmbedding(n_lm_tokens_channels)
  
      self.query_proj = nn.Sequential(
          ConvNorm(
              n_text_channels,
              n_text_channels,
              kernel_size=3,
              bias=True,
              w_init_gain="relu",
          ),
          torch.nn.ReLU(),
          ConvNorm(
              n_text_channels, n_text_channels, kernel_size=1, bias=True
          ),
      )
  
      self.key_proj = nn.Sequential(
          ConvNorm(
              n_lm_tokens_channels,
              n_text_channels,
              kernel_size=3,
              bias=True,
              w_init_gain="relu",
          ),
          torch.nn.ReLU(),
          ConvNorm(
              n_text_channels, n_text_channels, kernel_size=1, bias=True
          ),
      )
  
      self.value_proj = nn.Sequential(
          ConvNorm(
              n_lm_tokens_channels,
              n_text_channels,
              kernel_size=3,
              bias=True,
              w_init_gain="relu",
          ),
          torch.nn.ReLU(),
          ConvNorm(
              n_text_channels, n_text_channels, kernel_size=1, bias=True
          ),
      )
  
      self.scale = math.sqrt(n_text_channels)
  
imports: import math
  import torch
  from torch import nn
  from nemo.collections.tts.modules.submodules import ConvNorm
  from nemo.collections.tts.modules.transformer import PositionalEmbedding
label_desc: Use image node_id 1 to create a new SelfAttentionModule object from inherited base classes: nn with example: obj = SelfAttentionModule(n_text_channels, n_lm_tokens_channels)