【PyTorch】冻结网络参数

方法一

  • 将需要固定的那部分参数的requires_grad置为False.
  • 在优化器中加入filter根据requires_grad进行过滤.
# requires_grad置为False
for p in net.XXX.parameters():
    p.requires_grad = False

# filter
optimizer.SGD(filter(lambda p: p.requires_grad, model.parameters()), lr=1e-3)

方法二

这种方式只需要在网络定义中的forward方法中,将需要冻结的层放在 torch.no_grad()下,强力推这种方式。

class xxnet(nn.Module):
    def __init__():
        ....
        self.layer1 = xx
        self.layer2 = xx
        self.fc = xx

    def forward(self.x):
        with torch.no_grad():
            x = self.layer1(x)
            x = self.layer2(x)
        x = self.fc(x)
        return x

参考

pytorch 冻结参数_Jasminexjf的博客-优快云博客_pytorch 冻结参数

PyTorch冻结网络参数_点PY的博客-优快云博客_pytorch 冻结参数

PyTorch是一个流行的机器学习框架,它允许用户在Python中创建和训练神经网络。在深度学习中,有时需要冻结神经网络的一些层或权重以允许其他层进行学习。这种技术在迁移学习、预训练网络和批标准化中经常使用。PYTORCH中有两种方法可以确定要冻结和解冻的网络层。以下是两种方法的详细解释。 1、方法一:requires_grad属性 在PyTorch中,可以通过设置requires_grad属性为False来固定网络权重。 以下是一个简单的示例: ``` import torch model = torch.models.resnet50(pretrained = True) # 冻结网络的前5个卷积层 for param in model.parameters(): if param.requires_grad and param in model.layer1.parameters(): param.requires_grad = False if param.requires_grad and param in model.layer2.parameters(): param.requires_grad = False if param.requires_grad and param in model.layer3.parameters(): param.requires_grad = False if param.requires_grad and param in model.layer4.parameters(): param.requires_grad = False if param.requires_grad and param in model.avgpool.parameters(): param.requires_grad = False ``` 在这个例子中,我们使用resnet50预训练模型,并冻结前5个卷积层。这是通过迭代模型的参数并设置requires_grad属性来完成的。设置requires_grad属性为False将禁用梯度计算,从而可以固定参数。 2、方法二:requires_grad_()方法 PyTorch还提供了一个方便的方法,可以直接调用requires_grad_()方法来冻结或解冻网络层。该方法将引用一个新的张量,该张量允许用户直接在张量上设置新值。 以下是一个简单的示例: ``` import torch model = torch.models.resnet50(pretrained = True) # 冻结网络的前5个卷积层 for param in model.parameters(): param.requires_grad_(False) if param.requires_grad and param in model.avgpool.parameters(): param.requires_grad_(True) ``` 在这个例子中,我们使用resnet50预训练模型,并冻结前5个卷积层。这是通过使用requires_grad_()方法来完成的。requires_grad_()方法将返回一个新的张量,并设置requires_grad属性为True或False。在这种情况下,我们将requires_grad属性设置为False以冻结前5个卷积层,并将avgpool层的requires_grad属性设置为True以允许其进行训练。 总之,这两种方法都是有效的冻结神经网络层或参数的方法,用户可以根据自己的需要选择其中一种方法,以提高模型的学习效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值