{"record":{"id":"e7284716fae0c49a","repo":"rohitg00/ai-engineering-from-scratch","slug":"expected-b-nt-hidden-got-tuple-x-shape","errorCode":null,"errorMessage":"expected (B, Nt, hidden), got {tuple(x.shape)}","messagePattern":"expected \\(B, Nt, hidden\\), got (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phases/19-capstone-projects/61-cross-attention-fusion/code/main.py","lineNumber":109,"sourceCode":"        self.q_proj = nn.Linear(cfg.hidden, cfg.hidden, bias=True)\n        self.kv_proj = nn.Linear(cfg.vision_dim, cfg.hidden * 2, bias=True)\n        self.out = nn.Linear(cfg.hidden, cfg.hidden, bias=True)\n        self.drop = nn.Dropout(cfg.dropout)\n        self.scale = 1.0 / math.sqrt(cfg.head_dim)\n\n    def project_memory(self, memory: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:\n        if memory.dim() != 3:\n            raise ValueError(f\"expected (B, Nv, vision_dim), got {tuple(memory.shape)}\")\n        b, nv, _ = memory.shape\n        h, hd = self.cfg.heads, self.cfg.head_dim\n        kv = self.kv_proj(memory).reshape(b, nv, 2, h, hd).permute(2, 0, 3, 1, 4)\n        return kv[0], kv[1]\n\n    def forward(self, x: torch.Tensor, memory: torch.Tensor,\n                kv_cache: tuple[torch.Tensor, torch.Tensor] | None = None\n                ) -> torch.Tensor:\n        if x.dim() != 3:\n            raise ValueError(f\"expected (B, Nt, hidden), got {tuple(x.shape)}\")\n        if memory.shape[0] != x.shape[0]:\n            raise ValueError(\n                f\"batch mismatch: text {x.shape[0]} vs memory {memory.shape[0]}\"\n            )\n        b, nt, d = x.shape\n        h, hd = self.cfg.heads, self.cfg.head_dim\n\n        q = self.q_proj(x).reshape(b, nt, h, hd).transpose(1, 2)\n        if kv_cache is None:\n            k, v = self.project_memory(memory)\n        else:\n            k, v = kv_cache\n            expected = (b, h, memory.shape[1], hd)\n            if k.shape != expected or v.shape != expected:\n                raise ValueError(\n                    f\"kv_cache must be (B,H,Nv,hd)={expected}, got \"\n                    f\"k={tuple(k.shape)} v={tuple(v.shape)}\"\n                )","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/19-capstone-projects/61-cross-attention-fusion/code/main.py#L91-L127","documentation":"Error \"expected (B, Nt, hidden), got {tuple(x.shape)}\" thrown in rohitg00/ai-engineering-from-scratch.","triggerScenarios":"Thrown at phases/19-capstone-projects/61-cross-attention-fusion/code/main.py:109 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"}