深度学习15—(迁移学习)冻结和解冻神经网络模型的参数

冻结与解冻代码: 

def freeze_net(net):
    if not net:
        return
    for p in net.parameters():
        p.requires_grad = False


def unfreeze_net(net):
    if not net:
        return
    for p in net.parameters():
        p.requires_grad = True

这段代码定义了两个函数:`freeze_net` 和 `unfreeze_net`,这两个函数的目的是分别冻结和解冻一个神经网络模型的参数,控制是否对模型参数进行梯度计算。以下是对这两个函数的详细解释:

# 当调用此函数后,模型的参数将不再参与梯度计算,即在反向传播过程中不会更新这些参数的梯度值
# 输入参数 net 是一个 PyTorch 模型对象
def freeze_net(net):
    
    # 检查 net 是否为 None 或者为空,如果是则直接返回,不进行任何操作
    if not net:
        return
    
    # 通过设置 p.requires_grad = False,将参数的梯度计算设置为不可用(冻结)
    for p in net.parameters():
        p.requires_grad = False

        
# 当调用此函数后,模型的参数将重新参与梯度计算,即在反向传播过程中会更新这些参数的梯度值
def unfreeze_net(net):
    
    # 检查 net 是否为 None 或者为空,如果是则直接返回,不进行任何操作
    if not net:
        return
    
    # 对模型的每个参数进行遍历,通过设置 p.requires_grad = True,将参数的梯度计算设置为可用(解冻)
    for p in net.parameters():
        p.requires_grad = True

这两个函数对于模型微调(fine-tuning)和迁移学习(transfer learning)等场景非常有用。例如,在迁移学习中,你可能希望冻结预训练模型的一部分参数,只更新模型的最后几层以适应新任务。通过这两个函数,可以方便地控制模型参数的梯度计算状态。

最近更新

  1. TCP协议是安全的吗?

    2024-01-08 06:36:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-08 06:36:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-08 06:36:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-08 06:36:05       20 阅读

热门阅读

  1. react hooks

    2024-01-08 06:36:05       38 阅读
  2. 与CSDN相识的第一年

    2024-01-08 06:36:05       32 阅读
  3. c语言考试代码

    2024-01-08 06:36:05       42 阅读
  4. k8s 运行深度学习 k8s实现原理

    2024-01-08 06:36:05       37 阅读
  5. CentOS 7 系列默认的网卡接口名称

    2024-01-08 06:36:05       38 阅读
  6. OpenVPN非加密连接

    2024-01-08 06:36:05       28 阅读