XingangPan/DragGAN · error · ValueError

Unknown TensorFlow kwarg

Error message

Unknown TensorFlow kwarg

What it means

Same version guard as the generator, but in legacy.convert_tf_discriminator: TF discriminator pickles must have version >= 4 to be convertible to the PyTorch Discriminator class. Older discriminator classes (StyleGAN v1 etc.) have different param naming (no dlatent/FromRGB layout assumed here) and are rejected.

Source

Thrown at legacy.py:155

            num_layers      = kwarg('mapping_layers',       8),
            embed_features  = kwarg('label_fmaps',          None),
            layer_features  = kwarg('mapping_fmaps',        None),
            activation      = kwarg('mapping_nonlinearity', 'lrelu'),
            lr_multiplier   = kwarg('mapping_lrmul',        0.01),
            w_avg_beta      = kwarg('w_avg_beta',           0.995,  none=1),
        ),
    )

    # Check for unknown kwargs.
    kwarg('truncation_psi')
    kwarg('truncation_cutoff')
    kwarg('style_mixing_prob')
    kwarg('structure')
    kwarg('conditioning')
    kwarg('fused_modconv')
    unknown_kwargs = list(set(tf_kwargs.keys()) - known_kwargs)
    if len(unknown_kwargs) > 0:
        raise ValueError('Unknown TensorFlow kwarg', unknown_kwargs[0])

    # Collect params.
    tf_params = _collect_tf_params(tf_G)
    for name, value in list(tf_params.items()):
        match = re.fullmatch(r'ToRGB_lod(\d+)/(.*)', name)
        if match:
            r = kwargs.img_resolution // (2 ** int(match.group(1)))
            tf_params[f'{r}x{r}/ToRGB/{match.group(2)}'] = value
            kwargs.synthesis.kwargs.architecture = 'orig'
    #for name, value in tf_params.items(): print(f'{name:<50s}{list(value.shape)}')

    # Convert params.
    G = network_class(**kwargs).eval().requires_grad_(False)
    # pylint: disable=unnecessary-lambda
    # pylint: disable=f-string-without-interpolation
    _populate_module_params(G,
        r'mapping\.w_avg',                                  lambda:     tf_params[f'dlatent_avg'],
        r'mapping\.embed\.weight',                          lambda:     tf_params[f'mapping/LabelEmbed/weight'].transpose(),

View on GitHub (pinned to 336f120ce1)

Solutions

  1. Use discriminator pickles exported by the stylegan2(-ada) TF repos with version >= 4
  2. Re-save the TF D network with version bumped only after verifying kwargs/params match the v4 layout
  3. Load already-converted PyTorch .pkl files
  4. If converting an old D is required, write a custom converter mirroring convert_tf_discriminator

Example fix

# before
D = legacy.convert_tf_discriminator(old_stylegan1_D)  # ValueError

# after
D = legacy.convert_tf_discriminator(stylegan2_D)  # version >= 4
# or skip: D = legacy.load_network_pickle('stylegan2-ffhq-1024x1024.pkl').D
Defensive patterns

Strategy: validation

Validate before calling

if getattr(tf_D, 'version', 0) < 4:
    raise ValueError('Needs a version>=4 TF discriminator pickle')

Type guard

def is_convertible_tf_discriminator(tf_D) -> bool:
    return getattr(tf_D, 'version', 0) >= 4

Try / catch

try:
    D = legacy.convert_tf_discriminator(tf_D)
except ValueError as e:
    if 'version too low' in str(e):
        # obtain v4 D pickle or custom-convert
        ...
    raise

Prevention

When it happens

Trigger: Calling convert_tf_discriminator (usually via legacy.load_network_pickle with a TF pickle) where tf_D.version < 4 — e.g. the D pickle from the original stylegan repo.

Common situations: Porting old TF experiments' discriminator checkpoints; re-serialized pickles where version was not preserved; mixed checkpoints (new G with old D).

Related errors


AI-assisted analysis of XingangPan/DragGAN@336f120ce1 (2026-08-27). Data as JSON: /api/errors/538d712e455fe527. Report an issue: GitHub.