Skip to content

Load old state_dict for version>=4.4.0 #141

@Jooyuza

Description

@Jooyuza

DeepQuantum v4.4.0 has flattened the operators list. Previously, operators contained layers as nested gates lists (e.g., operators.0.gates.0.theta), but now the model treats all gates as a single flat sequence of operators (e.g., operators.0.theta, operators.1.matrix, etc.).

In consequence, loading model state_dict trained by old version will cause a RuntimeError:
RuntimeError: Error(s) in loading state_dict for QubitCircuit: Missing key(s) in state_dict: "operators.0.theta", "operators.1.theta", "operators.3.theta", "operators.4.theta", "operators.5.matrix", "operators.6.matrix". Unexpected key(s) in state_dict: "operators.0.gates.0.theta", "operators.0.gates.1.theta", "operators.1.gates.0.theta", "operators.1.gates.1.theta", "operators.3.gates.0.matrix", "operators.3.gates.1.matrix".

Image

In order to load an old state_dict, convert it to the new format via the following script:

from collections import OrderedDict

def convert_state_dict(old_state_dict):
    """
    Converts the old hierarchical state_dict to the new flattened operator format.
    """
    new_state_dict = OrderedDict()

    # We initialize a counter specifically for the new flattened 'operators' list
    operator_index = 0

    for key, value in old_state_dict.items():
        if key.startswith("operators"):
            # Logic: The new model flattens the list.
            # We take the parameter name (last part of the key, e.g., 'theta' or 'matrix')
            # and assign it to the incrementing operator_index.

            param_name = key.split('.')[-1] # Gets 'theta' or 'matrix'
            new_key = f"operators.{operator_index}.{param_name}"

            new_state_dict[new_key] = value

            operator_index += 1

        else:
            # Keep 'init_state' and 'observables' exactly as they are
            new_state_dict[key] = value

    return new_state_dict

Then all keys matched successfully:

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions