Невозможно загрузить сохраненную модель с онлайн-ресурса, ошибка рассылки - PullRequest
0 голосов
/ 11 октября 2019

Я не могу загрузить и использовать модель, сохраненную ранее из онлайн-хранилища. Вот код:


model = Model().double()   # Model is defined in another class
state_dict = torch.hub.load_state_dict_from_url(r'https://filebin.net/j2977ux7kts41aft/checkpoint_best.pt?t=wjbujfoo')
model.load_state_dict(state_dict)
model.eval()

, который дает мне следующую ошибку:

Traceback (most recent call last):
  File "/path/file.py", line 47, in <module>
    state_dict = torch.hub.load_state_dict_from_url(r'https://filebin.net/j2977ux7kts41aft/checkpoint_best.pt?t=wjbujfoo')
  File "anaconda3/envs/torch_env/lib/python3.6/site-packages/torch/hub.py", line 466, in load_state_dict_from_url
    return torch.load(cached_file, map_location=map_location)
  File "/anaconda3/envs/torch_env/lib/python3.6/site-packages/torch/serialization.py", line 386, in load
    return _load(f, map_location, pickle_module, **pickle_load_args)
  File "anaconda3/envs/torch_env/lib/python3.6/site-packages/torch/serialization.py", line 563, in _load
    magic_number = pickle_module.load(f, **pickle_load_args)
_pickle.UnpicklingError: invalid load key, '\x0a'.

Модель находится в: https://filebin.net/j2977ux7kts41aft/checkpoint_best.pt?t=wjbujfoo

Обратите внимание, что я могу отлично загрузить еговручную, а затем используйте torch.load(path), чтобы загрузить его без ошибок, но мне нужно сделать это из кода! Может ли быть так, что сериализация при загрузке с url каким-то образом испортит кодировку pickle?

Редактировать: мне не нужно использовать filebin, достаточно любого онлайн-хранилища, которое поддерживает то, что я пытаюсь сделать.

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Проблема действительно была в конфигурации среды. Я создал модель с PyTorch 1.0.2, а затем обновил до 1.2.0, чтобы использовать torch.hub. Это дало мне ошибку рассола. После обучения новой модели в 1.2.0 ошибка теперь исчезла.

Надеюсь, это поможет кому-то в будущем :)

0 голосов
/ 11 октября 2019

Этот код со ссылкой из параметра «кнопка загрузки» и «map_location» отлично работает для меня:

state_dict = torch.hub.load_state_dict_from_url(r'https://filebin.net/j2977ux7kts41aft/checkpoint_best.pt?t=wjbujfoo', map_location=torch.device('cpu'))
...