pytorch最后的权重文件是.pth格式的。
经常遇到的问题:
进行finutune时,改配置文件中的学习率,发现程序跑起来后竟然保持了以前的学习率, 并没有使用新的学习率。
原因:
首先查看.pth文件中的内容,我们发现它其实是一个字典格式的文件
其中保存了optimizer和scheduler,所以再次加载此文件时会使用之前的学习率。
我们只需要权重,也就是model部分,将其导出就可以了
import torch
original = torch.load('path/to/your/checkpoint.pth')
new = {"model": original["model"]}
torch.save(new, 'path/to/new/checkpoint.pth')
二、查看某一层权重值
以resnet18为例说明:
import torch
import pandas as pd
import numpy as np
import torchvision.models as models
resnet18 = models.resnet18(pretrained=True)
parm={}
for name,parameters in resnet18.named_parameters():
print(name,':',parameters.size())
parm[name]=parameters.detach().numpy()
上述代码将每个模块参数存入parm字典中,parameters.detach().numpy()将tensor类型变量转换成numpy array形式,方便后续存储到表格中.输出为:
conv1.weight : torch.Size([64, 3, 7, 7])
bn1.weight : torch.Size([64])
bn1.bias : torch.Size([64])
layer1.0.conv1.weight : torch.Size([64, 64, 3, 3])
layer1.0.bn1.weight : torch.Size([64])
layer1.0.bn1.bias : torch.Size([64])
layer1.0.conv2.weight : torch.Size([64, 64, 3, 3])
layer1.0.bn2.weight : torch.Size([64])
layer1.0.bn2.bias : torch.Size([64])
layer1.1.conv1.weight : torch.Size([64, 64, 3, 3])
layer1.1.bn1.weight : torch.Size([64])
layer1.1