В моей задаче я хочу загрузить веса из уже подготовленной модели в мою локальную модель. Но я не понимаю, зачем нам нужна эта строка "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