huggingface/pytorch-image-models · error · ValueError

Cannot initialize position embeddings without grid_size.Plea

Error message

Cannot initialize position embeddings without grid_size.Please provide img_size or pos_embed_grid_size.

What it means

NaFlexViT requires a known patch grid before it can build factorized or learned position embeddings. If neither img_size nor pos_embed_grid_size is provided, self.pos_embed_grid_size is None and the embedding cannot be initialized, so __init__ aborts.

Source

Thrown at timm/models/naflexvit.py:517

            )
        else:
            self.patch_interpolator = None

        self.supports_patch_interpolation = bool(
            self.is_linear
            and self.patch_interpolator is not None
            and self.norm_input is None
        )

        # Create normalization layer after the projection
        assert not (proj_norm_layer is True and norm_layer is None), \
            "`norm_layer` must be given when proj_norm_layer=True"
        proj_norm_layer = norm_layer if proj_norm_layer is True else (proj_norm_layer or None)
        self.norm = proj_norm_layer(embed_dim) if proj_norm_layer else nn.Identity()

        # Create position embedding if needed - only for patches, never for prefix tokens
        if pos_embed in ('factorized', 'learned') and self.pos_embed_grid_size is None:
            raise ValueError(
                "Cannot initialize position embeddings without grid_size."
                "Please provide img_size or pos_embed_grid_size.")
        self.pos_embed: Optional[torch.Tensor] = None
        self.pos_embed_y: Optional[torch.Tensor] = None
        self.pos_embed_x: Optional[torch.Tensor] = None
        if not pos_embed or pos_embed == 'none':
            self.pos_embed_type = 'none'
        elif pos_embed == 'factorized':
            assert self.pos_embed_grid_size is not None
            h, w = self.pos_embed_grid_size
            self.pos_embed_type = 'factorized'
            self.pos_embed_y = nn.Parameter(torch.empty(1, h, embed_dim, **dd))
            self.pos_embed_x = nn.Parameter(torch.empty(1, w, embed_dim, **dd))
        else:
            assert self.pos_embed_grid_size is not None
            h, w = self.pos_embed_grid_size
            self.pos_embed = nn.Parameter(torch.empty(1, h, w, embed_dim, **dd))
            self.pos_embed_type = 'learned'

View on GitHub (pinned to 9a5261e31b)

Solutions

  1. Pass img_size=(H, W) so the grid can be derived
  2. Or pass pos_embed_grid_size=(gh, gw) explicitly
  3. Or use pos_embed=None/'none'/'rope' if position info is not needed

Example fix

# before
model = naflexvit_base(pos_embed='factorized')
# after
model = naflexvit_base(pos_embed='factorized', pos_embed_grid_size=(16, 16))
Defensive patterns

Strategy: validation

Validate before calling

if cfg['pos_embed'] in ('factorized', 'learned'):
    assert cfg.get('img_size') or cfg.get('pos_embed_grid_size'), 'grid size required'

Prevention

When it happens

Trigger: Creating NaFlexViT (or naflex_vit_* factories / vit with patch_embed capable of dynamic sizes) with pos_embed='factorized' or 'learned' while omitting both img_size and pos_embed_grid_size.

Common situations: Switching a config from absolute learned pos_embed with fixed img_size to factorized embeddings and dropping img_size; building NaFlex models from partial YAML configs.

Understand the failure class

Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.

Related errors


AI-assisted analysis of huggingface/pytorch-image-models@9a5261e31b (2026-08-27). Data as JSON: /api/errors/d875f695f38a3f54. Report an issue: GitHub.