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
- Pass img_size=(H, W) so the grid can be derived
- Or pass pos_embed_grid_size=(gh, gw) explicitly
- 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
- Treat pos_embed type and grid size as coupled config keys
- Always specify img_size when changing pos_embed style
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
- Unknown rope_type: {cfg.rope_type}
- batch_sizes must contain at least one value.
- Model architecture ({arch_name}) has no pretrained cfg regis
- Patch interpolation is not supported by this embedding confi
- output_fmt="NCHW" is not supported for NaFlex (dict) inputs,
AI-assisted analysis of huggingface/pytorch-image-models@9a5261e31b (2026-08-27).
Data as JSON: /api/errors/d875f695f38a3f54.
Report an issue: GitHub.