XingangPan/DragGAN · error · ValueError
TensorFlow pickle version too low
Error message
TensorFlow pickle version too low
What it means
Raised inside legacy.convert_tf_generator's kwarg-collection when the TF generator's static_kwargs contains keys not in the hardcoded known set (resolution, fmap_base, num_fp16_res, ... , style_mixing_prob, structure, conditioning, fused_modconv). It exists to fail fast rather than silently dropping weights during TF->PyTorch conversion; the offending kwarg name is included in the exception args.
Source
Thrown at legacy.py:109
match = re.fullmatch(pattern, name)
if match:
found = True
if value_fn is not None:
value = value_fn(*match.groups())
break
try:
assert found
if value is not None:
tensor.copy_(torch.from_numpy(np.array(value)))
except:
print(name, list(tensor.shape))
raise
#----------------------------------------------------------------------------
def convert_tf_generator(tf_G):
if tf_G.version < 4:
raise ValueError('TensorFlow pickle version too low')
# Collect kwargs.
tf_kwargs = tf_G.static_kwargs
known_kwargs = set()
def kwarg(tf_name, default=None, none=None):
known_kwargs.add(tf_name)
val = tf_kwargs.get(tf_name, default)
return val if val is not None else none
# Convert kwargs.
from training import networks_stylegan2
network_class = networks_stylegan2.Generator
kwargs = dnnlib.EasyDict(
z_dim = kwarg('latent_size', 512),
c_dim = kwarg('label_size', 0),
w_dim = kwarg('dlatent_size', 512),
img_resolution = kwarg('resolution', 1024),
img_channels = kwarg('num_channels', 3),View on GitHub (pinned to 336f120ce1)
Solutions
- Inspect tf_G.static_kwargs to see the unknown key, then add it via the kwarg() helper in legacy.py convert_tf_generator with an appropriate default/mapping
- If the kwarg only affects training (like style_mixing_prob), register it and ignore its value
- Use the matching converter from the fork the pickle came from
- Skip conversion and use an officially provided PyTorch .pkl
Example fix
# before
G = legacy.load_network_pickle('my-fork-generator.pkl')
# ValueError: ('Unknown TensorFlow kwarg', 'my_custom_kwarg')
# after — edit legacy.py convert_tf_generator:
kwarg('my_custom_kwarg', default=0.0) # map or ignore the new kwarg
G = legacy.load_network_pickle('my-fork-generator.pkl') Defensive patterns
Strategy: validation
Validate before calling
unknown = set(tf_G.static_kwargs) - expected_kwargs
if unknown:
print('unmapped kwargs:', unknown) # extend legacy.py before converting Type guard
def is_known_generator_kwargs(tf_G, known: set) -> bool:
return set(tf_G.static_kwargs).issubset(known) Try / catch
try:
G = legacy.convert_tf_generator(tf_G)
except ValueError as e:
if 'Unknown TensorFlow kwarg' in str(e):
# e.args[1] holds the offending kwarg name; register it in legacy.py
...
raise Prevention
- Inspect static_kwargs of custom pickles before conversion
- Register new kwargs via kwarg() in legacy.py when maintaining a fork
- Keep converters and checkpoints from the same repo version in sync
When it happens
Trigger: Calling legacy.load_network_pickle / convert_tf_generator on a TensorFlow pickle from a fork or newer TF variant (e.g. StyleGAN2-ADA TF, SWAE/swagan variants, conditional variants like 'label_size' handled elsewhere) that added custom kwargs unknown to this converter.
Common situations: Converting pickles from NVIDIA's stylegan2-ada (TF) repo whose kwargs differ; community forks that added custom layer options; also triggered by known-but-unmapped kwargs on very old conversions (e.g. nonlineary 'leakyrelu' variations are fine but unknown structure types are not).
Related errors
- cannot parse 2-vector {s}
- Unknown TensorFlow kwarg
- 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/c25da3e2e40f899c.
Report an issue: GitHub.