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

can*_*all 0 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')
Run Code Online (Sandbox Code Playgroud)

使用md5sum *.pth:

779f0fefca47d17a0644033f9b65e594  netG_1.pth
476f502ec2d1186c349cdeba14983d09  netG_2.pth
b0ceec8ac886a11b79f73fc04f51c6f9  netG.pth
Run Code Online (Sandbox Code Playgroud)

该模型是此类的一个实例:

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

Oli*_*çon 5

没有定义__hash__方法的类将根据其实例对其实例进行哈希处理id.至于CPython,这意味着每次保存和重新加载实例时,它都会改变哈希值,因为它在内存中的位置发生了变化.

这是一个概念证明.

class Foo:
    pass

instance = Foo()

print('hash:', hex(hash(instance)))
print('id:  ', hex(id(instance)))
Run Code Online (Sandbox Code Playgroud)

产量

hash: 0x22f3f57608
id:   0x22f3f576080
Run Code Online (Sandbox Code Playgroud)

确切的转变是hash(o) == id(o) // 16.