model.named_parameters()与model.parameters()

model.named_parameters()

迭代打印model.named_parameters()将会打印每一次迭代元素的名字和param。
并且可以更改参数的可训练属性

from torchvision.models.shufflenetv2 import shufflenet_v2_x1_0
model = shufflenet_v2_x1_0()
for name, parameter in model.named_parameters():
    print(name, parameter.requires_grad)

输出结果:

conv1.0.weight True
conv1.1.weight True
conv1.1.bias True
stage2.0.branch1.0.weight True
...
conv5.0.weight True
conv5.1.weight True
conv5.1.bias True
fc.weight True
fc.bias True

model.parameters()

迭代打印model.parameters()将会打印每一次迭代元素的param而不会打印名字,这是它和named_parameters的区别,两者都可以用来改变requires_grad的属性。

pytorch中加载预训练模型的一般方法

# torch.load() 返回一个字典形式
weights_dict = torch.load(weights_path, map_location=device)
load_weights_dict = {k: v for k, v in weights_dict.items() if 'fc' not in k}
# load_weights_dict = {k: v for k, v in weights_dict.itmes()
#                   if model.state_dict()[k].numel() == v.numel()}
model.load_state_dict(load_weights_dict, strict=False)

# 冻结特征提取层参数
for name, param in model.named_parameters():
	param.requires_grad = False if 'fc' not in name else True
pg = [p for p in model.parameters() if p.requires_grad]
optimizer = torch.optim.SGD(pg, lr=lr, momentum=0.9, weight_decay=4E-5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值