class_docstr: ## Multi-head attention with rotary positional embeddings
  
  We override [multi-head attention from original transformer](../mha.html).
code: def __init__(
      self,
      heads: int,
      d_model: int,
      rope_percentage: float = 0.5,
      rope_value_percentage: float = 0.5,
      dropout_prob: float = 0.0,
  ):
      super().__init__(heads, d_model, rope_percentage, dropout_prob)
  
      # Rotary positional embedding layers
      d_rope_value = int(self.d_k * rope_value_percentage)
  
      self.value_rotary_pe = RotaryPositionalEmbeddings(d_rope_value)
      self.value_reverse_rotary_pe = ReverseRotaryPositionalEmbeddings(
          d_rope_value
      )
  
file_path: annotated_deep_learning_paper_implementations/labml_nn/transformers/rope/value_pe/__init__.py
imports: from typing import Optional
  import torch
  from labml_nn.transformers.rope import RotaryPositionalEmbeddings, RotaryPEMultiHeadAttention
label_desc: Use image node_id 1 to create a new RotaryValuePEMultiHeadAttention object from inherited base classes: RotaryPEMultiHeadAttention with example: obj = RotaryValuePEMultiHeadAttention(heads, d_model, rope_percentage, rope_value_percentage, dropout_prob)