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

使用optim.SGD传入Hardtanh/ReLU参数时报空参数列表错误,求原因

问题原因
  • nn.Hardtanh、nn.ReLU这类激活函数属于无参数层,它们内部没有可训练的权重(weight)或偏置(bias)参数,调用.parameters()方法会返回空的参数迭代器,优化器拿到空列表就会抛出optimizer got an empty parameter list错误。
  • nn.Linear是带可训练参数的层,包含weight和bias两个可训练张量,调用.parameters()能返回有效的参数集合,因此优化器可以正常初始化。
解决方案

根据你的实际需求调整优化目标:

  1. 如果是误将激活函数替换了全连接输出层:应该保留全连接层作为输出层,把激活函数附加在其后,示例代码:
num_ftrs = model_conv.fc.in_features
# 用Sequential组合全连接层和激活函数
model_conv.fc = nn.Sequential(
    nn.Linear(num_ftrs, 1),
    nn.Hardtanh(min_val=0.0, max_val=1.0)
)
# 优化全连接层的参数(激活函数无参数无需优化)
optimizer_conv = optim.SGD(model_conv.fc[0].parameters(), lr=config.learning_rate, momentum=config.momentum)
  1. 如果需要优化模型其他部分的参数:比如想优化卷积主干的参数,直接指定对应参数即可:
# 优化整个模型的参数
optimizer_conv = optim.SGD(model_conv.parameters(), lr=config.learning_rate, momentum=config.momentum)
# 或者仅优化卷积主干参数(假设主干存在于model_conv.base下)
optimizer_conv = optim.SGD(model_conv.base.parameters(), lr=config.learning_rate, momentum=config.momentum)

内容的提问来源于stack exchange,提问作者Krzysztof Marchewka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:24:30