Почему хэш-значение моделей меняется каждый раз, когда я его сохраняю? - PullRequest
0 голосов
/ 03 сентября 2018

Я использую torch.save () для сохранения файла модели. Однако каждый раз, когда я сохраняю его, он меняется. Почему так?

netG_1 = torch.load('netG.pth')
netG_2 = torch.load('netG.pth')

torch.save(netG_1, 'netG_1.pth')
torch.save(netG_2, 'netG_2.pth')

Использование md5sum *.pth:

779f0fefca47d17a0644033f9b65e594  netG_1.pth
476f502ec2d1186c349cdeba14983d09  netG_2.pth
b0ceec8ac886a11b79f73fc04f51c6f9  netG.pth

Модель является экземпляром этого класса:

https://github.com/taoxugit/AttnGAN/blob/master/code/model.py#L397

1 Ответ

0 голосов
/ 03 сентября 2018

Класс, который не определяет метод __hash__, будет хэшировать свои экземпляры в соответствии с их id. Что касается CPython, это означает, что каждый раз, когда экземпляр сохраняется и перезагружается, он меняет хеш, так как его позиция в памяти изменяется.

Вот подтверждение концепции.

class Foo:
    pass

instance = Foo()

print('hash:', hex(hash(instance)))
print('id:  ', hex(id(instance)))

выход

hash: 0x22f3f57608
id:   0x22f3f576080

Точное преобразование hash(o) == id(o) // 16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...