我正在使用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
没有定义__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.