应用场景:
对模型有一些具体的操作,需要查看自己写的代码是否正确即参数是否是按照自己想要的方式更新
问题描述
期末报告中要求模型在某一个阶段冻住,也就是说不能让参数更新。所以需要在自己写完代码之后测试是否参数如自己所愿没有更新也没有被自己误清零,所以就想把训练的参数打出来,看值是否变化
第一种方法是最简单方便的:即遍历所有的参数(假如只有weight 和 bias) 就会遍历这2,在每一次训练的时候打出来,但是有一个不太方便的地方就是它会输出所有层的参数。
for name, parameter in self.model.named_parameters():
print(name. parameter)
- 1
- 2
但是一般情况我们只想看最后一层的输出,这样就可以选择你要看的具体层的参数更新情况
//这是我的domain_encoder 模块
self.domain_encoder = nn.Sequential(
nn.Linear(512, 512),
nn.BatchNorm1d(512),
nn.ReLU(),
nn.Linear(512, 512),
nn.BatchNorm1d(512),
nn.ReLU(),
nn.Linear(512, 512),
nn.BatchNorm1d(512),
nn.ReLU()
)
# 我想打出第六层出来之后的参数(weight 和 bias)的更新状况
print(self.model.domain_encoder[6].state_dict())
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
再具体些,如果你想直接看自己选中层的某一个参数
print(self.model.category_classifier[0].weight.grad)
- 1