{"record":{"id":"39c2215ed65eace0","repo":"rohitg00/ai-engineering-from-scratch","slug":"d-model-must-be-even-got-d-model","errorCode":null,"errorMessage":"d_model must be even, got {d_model}","messagePattern":"d_model must be even, got (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phases/19-capstone-projects/33-multihead-self-attention/code/main.py","lineNumber":124,"sourceCode":"        self.embedding = nn.Embedding(vocab_size, d_model)\n        with torch.no_grad():\n            self.embedding.weight.normal_(0.0, 0.02)\n\n    def forward(self, ids: torch.Tensor) -> torch.Tensor:\n        return self.embedding(ids)\n\n\nclass SinusoidalPositionalEmbedding(nn.Module):\n    \"\"\"Parameter-free sin/cos positional table (compact copy of lesson 32).\"\"\"\n\n    def __init__(self, max_context_length: int, d_model: int, base: float = 10000.0) -> None:\n        super().__init__()\n        if max_context_length < 1:\n            raise ValueError(f\"max_context_length must be >= 1, got {max_context_length}\")\n        if d_model < 1:\n            raise ValueError(f\"d_model must be >= 1, got {d_model}\")\n        if d_model % 2 != 0:\n            raise ValueError(f\"d_model must be even, got {d_model}\")\n        self.max_context_length = max_context_length\n        pos = torch.arange(max_context_length, dtype=torch.float32).unsqueeze(1)\n        i = torch.arange(d_model // 2, dtype=torch.float32)\n        denom = base ** (2 * i / d_model)\n        angle = pos / denom\n        pe = torch.zeros(max_context_length, d_model, dtype=torch.float32)\n        pe[:, 0::2] = torch.sin(angle)\n        pe[:, 1::2] = torch.cos(angle)\n        self.register_buffer(\"pe\", pe, persistent=False)\n\n    def forward(self, seq_len: int) -> torch.Tensor:\n        if seq_len < 1:\n            raise ValueError(f\"seq_len must be >= 1, got {seq_len}\")\n        if seq_len > self.max_context_length:\n            raise ValueError(\n                f\"seq_len {seq_len} exceeds max_context_length {self.max_context_length}\"\n            )\n        return self.pe[:seq_len]","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/19-capstone-projects/33-multihead-self-attention/code/main.py#L106-L142","documentation":"Error \"d_model must be even, got {d_model}\" thrown in rohitg00/ai-engineering-from-scratch.","triggerScenarios":"Thrown at phases/19-capstone-projects/33-multihead-self-attention/code/main.py:124 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}