Python 为什么每次保存时模型的哈希值都会更改?
我正在使用torch.save()保存模型文件。但是,每次我保存它时,它都会更改。为什么会这样Python 为什么每次保存时模型的哈希值都会更改?,python,pytorch,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 476f502ec2
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
该模型是此类的一个实例:
未定义
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。对于CPython,这意味着每次保存和重新加载实例时,它都会更改哈希值,因为它在内存中的位置发生了更改
这是一个概念证明
class Foo:
pass
instance = Foo()
print('hash:', hex(hash(instance)))
print('id: ', hex(id(instance)))
输出
确切的转换是hash(o)==id(o)//16
```类测试:x=5通过m=Test()pickle.dump(m,open('m.p','w'))a=pickle.load(open('m.p','r'))b=pickle.load(open('m.p','r'))pickle.dump(a,open('a.p','w'))pickle.dump(b,open('b.p','w'))“``然后在执行md5sum*.p
:``86cdcd4e714de83f18b519052470155f a.p 86cdcd4e714de83f18b519052470155f b.p 86cdcdcd4e714de83f18b519052470155f m.p``但是当我将同一类的两个实例保存到内存中时,它们的哈希值不应该相同吗?因为它们的内容相同,所以它们的哈希值可能相同,也可能不同。如前所述,如果没有定义\uuuuu散列\uuuu
方法,则它们的内容是无关的。重要的是他们在记忆中的位置,可能相同,也可能不同。如果您希望哈希值基于其内容,请定义\uuuu hash\uuuu
我说的是md5sum哈希值,它表示文件的内容。@canonball哦,那么您的整个问题与Python无关,而只与md5sum有关?
hash: 0x22f3f57608
id: 0x22f3f576080