为什么每次保存模型时哈希值都会改变?

时间:2018-09-03 14:57:36

标签: python pytorch

我正在使用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 :(得分:5)

未定义__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