You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyTorch中冻结模型指定层(如nn.Linear)的部分参数?

PyTorch中冻结线性层指定输出对应的参数方法

线性层nn.Linear(n, 3)的参数结构如下:

  • fc.weight:形状为(3, n),每一行对应一个输出节点的权重参数
  • fc.bias:形状为(3,),每个元素对应一个输出节点的偏置参数

第三个输出节点对应的是索引为2的权重行和偏置元素(PyTorch张量索引从0开始),以下是两种冻结这些参数的实现方法:

方法一:直接设置参数的requires_grad属性

通过将目标参数的requires_grad设为False,反向传播时不会计算这些参数的梯度,自然不会被优化器更新:

import torch.nn as nn

n = 10  # 替换为你的实际输入维度
fc = nn.Linear(n, 3)

# 冻结第三个输出对应的权重行
fc.weight[2].requires_grad = False
# 冻结第三个输出对应的偏置
fc.bias[2].requires_grad = False

方法二:优化器仅传入需训练的参数

在初始化优化器时,只传入需要更新的参数(即排除第三个输出对应的参数),这样优化器不会对冻结参数执行更新操作:

import torch.optim as optim

# 收集需要训练的参数:前两个输出的权重和偏置
trainable_params = [
    fc.weight[:2],
    fc.bias[:2]
]

# 初始化优化器,仅传入可训练参数
optimizer = optim.SGD(trainable_params, lr=0.01)

注意事项

  • 如果后续需要解冻参数,只需将对应参数的requires_grad重新设为True即可
  • 若使用方法二,建议在设置好requires_grad后再初始化优化器,避免遗漏参数状态变化

内容的提问来源于stack exchange,提问作者Nard Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:00:28