Зачем нам нужно "state_dict = state_dict.copy ()" - PullRequest
0 голосов
/ 30 апреля 2020

В моей задаче я хочу загрузить веса из уже подготовленной модели в мою локальную модель. Но я не понимаю, зачем нам нужна эта строка "state_dict = state_dict.copy ()", если эти два имени имеют одно и то же имя "state_dict"

# copy state_dict so _load_from_state_dict can modify it
metadata = getattr(state_dict, '_metadata', None)
state_dict = state_dict.copy()
if metadata is not None:
    state_dict._metadata = metadata

def load(module, prefix=''):

    local_metadata = {} if metadata is None else metadata.get(prefix[:-1], {})
    module._load_from_state_dict(
        state_dict, prefix, local_metadata, True, missing_keys, unexpected_keys, error_msgs)
    for name, child in module._modules.items():
        if child is not None:
            load(child, prefix + name + '.')
start_prefix = ''
# print("hasattr(model, 'bert')",hasattr(model, 'bert')  ) :false
if not hasattr(model, 'bert') and any(s.startswith('bert.') for s in state_dict.keys()):
    start_prefix = 'bert.'
load(model, prefix=start_prefix)

Примечание: приведенный выше код взят из обнимающего лица (строка : 669) https://github.com/huggingface/transformers/blob/master/src/transformers/modeling_utils.py

...