rohitg00/ai-engineering-from-scratch · error · ValueError

expected 4D input, got {tuple(x.shape)}

Error message

expected 4D input, got {tuple(x.shape)}

What it means

Error "expected 4D input, got {tuple(x.shape)}" thrown in rohitg00/ai-engineering-from-scratch.

Source

Thrown at phases/19-capstone-projects/58-vision-encoder-patches/code/main.py:156

    """
    rng = np.random.default_rng(seed)
    noise = rng.standard_normal((channels, image_size, image_size)).astype("float32") * 0.1
    y_coords = np.linspace(0.0, 1.0, image_size, dtype="float32")
    x_coords = np.linspace(0.0, 1.0, image_size, dtype="float32")
    gx, gy = np.meshgrid(x_coords, y_coords, indexing="xy")
    gradient = np.stack([gx, gy, (gx + gy) * 0.5], axis=0).astype("float32")
    img = np.clip(gradient + noise + 0.5, 0.0, 1.0)
    return torch.from_numpy(img).unsqueeze(0)


def unfold_then_linear(x: torch.Tensor, weight: torch.Tensor, bias: torch.Tensor, patch_size: int) -> torch.Tensor:
    """Reference implementation of patch projection via unfold + matmul.

    Used by the tests to assert that the Conv2d projection matches the
    flatten-then-linear math.
    """
    if x.dim() != 4:
        raise ValueError(f"expected 4D input, got {tuple(x.shape)}")
    patches = x.unfold(2, patch_size, patch_size).unfold(3, patch_size, patch_size)
    b, c, gh, gw, ph, pw = patches.shape
    flat = patches.permute(0, 2, 3, 1, 4, 5).reshape(b, gh * gw, c * ph * pw)
    w_flat = weight.reshape(weight.shape[0], -1)
    return flat @ w_flat.T + bias


def describe_token_norms(tokens: torch.Tensor, max_show: int = 8) -> str:
    """Print the L2 norm of the first few tokens for sanity inspection."""
    norms = tokens.detach().norm(dim=-1)[0].tolist()
    head = norms[:max_show]
    return ", ".join(f"{v:.3f}" for v in head)


def main() -> None:
    print("=" * 60)
    print("VISION ENCODER PATCHES")
    print("=" * 60)

View on GitHub (pinned to 39ea8a1c6d)

When it happens

Trigger: Thrown at phases/19-capstone-projects/58-vision-encoder-patches/code/main.py:156 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26). Data as JSON: /api/errors/d5e3b7a0e1306076. Report an issue: GitHub.