{"record":{"id":"c25da3e2e40f899c","repo":"XingangPan/DragGAN","slug":"tensorflow-pickle-version-too-low","errorCode":null,"errorMessage":"TensorFlow pickle version too low","messagePattern":"TensorFlow pickle version too low","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"legacy.py","lineNumber":109,"sourceCode":"            match = re.fullmatch(pattern, name)\n            if match:\n                found = True\n                if value_fn is not None:\n                    value = value_fn(*match.groups())\n                break\n        try:\n            assert found\n            if value is not None:\n                tensor.copy_(torch.from_numpy(np.array(value)))\n        except:\n            print(name, list(tensor.shape))\n            raise\n\n#----------------------------------------------------------------------------\n\ndef convert_tf_generator(tf_G):\n    if tf_G.version < 4:\n        raise ValueError('TensorFlow pickle version too low')\n\n    # Collect kwargs.\n    tf_kwargs = tf_G.static_kwargs\n    known_kwargs = set()\n    def kwarg(tf_name, default=None, none=None):\n        known_kwargs.add(tf_name)\n        val = tf_kwargs.get(tf_name, default)\n        return val if val is not None else none\n\n    # Convert kwargs.\n    from training import networks_stylegan2\n    network_class = networks_stylegan2.Generator\n    kwargs = dnnlib.EasyDict(\n        z_dim               = kwarg('latent_size',          512),\n        c_dim               = kwarg('label_size',           0),\n        w_dim               = kwarg('dlatent_size',         512),\n        img_resolution      = kwarg('resolution',           1024),\n        img_channels        = kwarg('num_channels',         3),","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/XingangPan/DragGAN/blob/336f120ce126aca6f55dc58537e76c10d19eabd0/legacy.py#L91-L127","documentation":"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.","triggerScenarios":"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.","commonSituations":"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).","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"],"exampleFix":"# before\nG = legacy.load_network_pickle('my-fork-generator.pkl')\n# ValueError: ('Unknown TensorFlow kwarg', 'my_custom_kwarg')\n\n# after — edit legacy.py convert_tf_generator:\nkwarg('my_custom_kwarg', default=0.0)  # map or ignore the new kwarg\nG = legacy.load_network_pickle('my-fork-generator.pkl')","handlingStrategy":"validation","validationCode":"unknown = set(tf_G.static_kwargs) - expected_kwargs\nif unknown:\n    print('unmapped kwargs:', unknown)  # extend legacy.py before converting","typeGuard":"def is_known_generator_kwargs(tf_G, known: set) -> bool:\n    return set(tf_G.static_kwargs).issubset(known)","tryCatchPattern":"try:\n    G = legacy.convert_tf_generator(tf_G)\nexcept ValueError as e:\n    if 'Unknown TensorFlow kwarg' in str(e):\n        # e.args[1] holds the offending kwarg name; register it in legacy.py\n        ...\n    raise","preventionTips":["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"],"tags":["stylegan2","tensorflow","pickle","schema-mismatch","model-conversion"],"backgroundTag":"unknown-model-config-kwarg","analyzedSha":"336f120ce126aca6f55dc58537e76c10d19eabd0","analyzedAt":"2026-08-27T06:29:00.251Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}