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
- Use discriminator pickles exported by the stylegan2(-ada) TF repos with version >= 4
- Re-save the TF D network with version bumped only after verifying kwargs/params match the v4 layout
- Load already-converted PyTorch .pkl files
- 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
- Use StyleGAN2-era discriminator pickles only
- Pair G and D from the same export batch
- Load native PyTorch checkpoints when available
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
- cannot parse 2-vector {s}
- TensorFlow pickle version too low
- Cannot infer type name from input
- No data received
- Google Drive virus checker nag
AI-assisted analysis of XingangPan/DragGAN@336f120ce1 (2026-08-27).
Data as JSON: /api/errors/538d712e455fe527.
Report an issue: GitHub.