为什么有的.pth文件储存的是数字有些.pth储存的是网络结构?

对自己之前的一段代码的.pth文件里面储存的内容有些疑惑,因为有时候.pth文件储存的是网络结构,而有些储存的是数据,例如:

from collections import OrderedDict
import torch
import torch.nn as nn

class MDNet(nn.Module):
def init(self, model_path=None, K=1):
super(MDNet, self).init()
self.avgpool=nn.AdaptiveAvgPool2d(1)
self.layers=nn.Sequential(OrderedDict([
(‘conv1’, nn.Sequential(nn.Conv2d(3, 96, kernel_size=7, stride=2),
nn.ReLU(inplace=True),
nn.LocalResponseNorm(2),
nn.MaxPool2d(kernel_size=3, stride=2))),
(‘conv2’, nn.Sequential(nn.Conv2d(96, 256, kernel_size=5, stride=2),
nn.ReLU(inplace=True),
nn.LocalResponseNorm(2),
nn.MaxPool2d(kernel_size=3, stride=2))),
(‘conv3’, nn.Sequential(nn.Conv2d(256, 512, kernel_size=3, stride=1),
nn.ReLU(inplace=True))),
# (‘fc4’, nn.Sequential(nn.Linear(500, 512),
# nn.ReLU(inplace=True))),
# (‘fc5’, nn.Sequential(nn.Dropout(0.5),
# nn.Linear(500, 512),
# nn.ReLU(inplace=True)))
]))
def forward(self, x):
avg_result = self.avgpool(x)
output = self.layers(x)
return output
model = torch.load(f=“A.pth”)
print(model)

这段代码中A.pth输出的就是
在这里插入图片描述
而我改了一个.pth文件

from collections import OrderedDict
import torch
import torch.nn as nn

class MDNet(nn.Module):
def init(self, model_path=None, K=1):
super(MDNet, self).init()
self.avgpool=nn.AdaptiveAvgPool2d(1)
self.layers=nn.Sequential(OrderedDict([
(‘conv1’, nn.Sequential(nn.Conv2d(3, 96, kernel_size=7, stride=2),
nn.ReLU(inplace=True),
nn.LocalResponseNorm(2),
nn.MaxPool2d(kernel_size=3, stride=2))),
(‘conv2’, nn.Sequential(nn.Conv2d(96, 256, kernel_size=5, stride=2),
nn.ReLU(inplace=True),
nn.LocalResponseNorm(2),
nn.MaxPool2d(kernel_size=3, stride=2))),
(‘conv3’, nn.Sequential(nn.Conv2d(256, 512, kernel_size=3, stride=1),
nn.ReLU(inplace=True))),
# (‘fc4’, nn.Sequential(nn.Linear(500, 512),
# nn.ReLU(inplace=True))),
# (‘fc5’, nn.Sequential(nn.Dropout(0.5),
# nn.Linear(500, 512),
# nn.ReLU(inplace=True)))
]))
def forward(self, x):
avg_result = self.avgpool(x)
output = self.layers(x)
return output
model = torch.load(f=“GTOT.pth”)
print(model)

他储存的就是
在这里插入图片描述
其原因可能是:
①.pth文件通常是用来保存PyTorch模型的参数,可以包含模型的权重、偏置、优化器状态等信息。而模型的架构信息通常包含在代码中,例如在PyTorch中,可以使用nn.Module类来定义模型的架构,将各个层组合在一起。因此,模型架构通常不会被保存到.pth文件中,而是在代码中定义。
有时候,可能会将模型的架构保存为一个.pth文件,这种做法比较少见。通常来说,模型的架构信息都应该在代码中定义,以便于对模型进行修改和调整。保存模型参数和优化器状态的.pth文件可以方便地用于模型的加载和继续训练,而模型架构信息通常不需要被保存到文件中,因为可以从代码中获取到。
②通常情况下,.pth文件是用来保存模型参数的,它们保存了训练过程中模型的权重、偏置等参数。这些参数是通过优化算法(如梯度下降)在训练过程中不断更新的,以使得模型能够逐渐优化并得到更好的预测结果。
有些.pth文件的名称可能会包含数字,这通常是因为它们是通过自动化的训练流程生成的,并且保存了不同训练迭代的模型参数。在这种情况下,数字通常表示模型训练的迭代次数或者训练过程中的某些超参数设置。这些文件只保存了模型参数,没有保存网络结构信息。
另一方面,保存网络结构的文件通常是.pt或.pkl等格式,它们包含了完整的模型定义,包括网络结构、超参数设置以及训练好的参数等信息。这些文件通常是在训练过程结束后手动保存的,并用于后续的推理或重新训练等任务。如果你看到一个.pth文件包含了完整的网络结构,那可能是由于文件命名方式的问题或者它包含了额外的元数据信息。
不知道大家有什么样的看法,如果觉得我说的不对,请指出来,大家一起学习讨论讨论!



猜你喜欢

转载自blog.csdn.net/qq_45104603/article/details/129970658