for param in net.parameters()是怎么运行的

1.工作机制:

  • net.parameters()返回了一个生成器,生成的是模型中所有可以训练的参数
  • 每次循环,遍历了某一层的权重或者偏置
    net.parameters()
    输出为:[fc1.weight, fc1.bias, fc2.weight, fc2.bias]
    
    for param in net.parameters():
        print(param.shape)
    
    torch.Size([5, 10])  # fc1.weight
    torch.Size([5])      # fc1.bias
    torch.Size([2, 5])   # fc2.weight
    torch.Size([2])      # fc2.bias

    从上面的代码可以看出,每循环一次,输出某一层的权重或者偏置,一直到把所有层都输出完毕

在 PyTorch 中,`net.parameters()` 是一个非常常用的方法,用于获取神经网络模型中所有需要训练的参数(即权重和偏置等可学习参数)。该方法返回一个迭代器,可以用来遍历模型中的每个参数张量。这种方式广泛应用于参数初始化、优化器设置、参数冻结、模型调试以及自定义训练逻辑等场景。 ### 用途 1. **优化器设置**:在构建优化器时,通常将 `net.parameters()` 作为参数传入,表示优化器需要更新哪些参数。 ```python optimizer = torch.optim.Adam(net.parameters(), lr=0.001) ``` 这样优化器就能自动追踪并更新模型中的所有可训练参数[^3]。 2. **参数初始化**:可以通过遍历 `net.parameters()` 对模型中的参数进行自定义初始化。 ```python for param in net.parameters(): if len(param.shape) > 1: torch.nn.init.xavier_uniform_(param) ``` 上述代码对所有二维以上的参数使用 Xavier 初始化策略[^1]。 3. **参数冻结**:在迁移学习或部分参数固定训练中,可以通过遍历 `net.parameters()` 并设置 `requires_grad=False` 来冻结某些层的参数。 ```python for i, param in enumerate(net.parameters()): if i < 5: # 前五层参数冻结 param.requires_grad = False ``` 这样可以阻止这些参数在反向传播中被更新[^2]。 4. **模型调试与分析**:通过遍历参数,可以打印其形状、梯度信息等,帮助理解模型结构和训练状态。 ```python for index, param in enumerate(net.parameters()): print(f"Layer {index}: {param.shape}") ``` 这种方式有助于确认参数是否按照预期加载或初始化[^1]。 5. **手动参数更新**:在某些自定义优化过程中,可能需要手动访问参数并执行更新操作。 ```python with torch.no_grad(): for param in net.parameters(): param -= learning_rate * param.grad ``` 这是模拟优化器更新参数的一种方式[^3]。 ### 使用注意事项 - `net.parameters()` 只返回那些具有 `requires_grad=True` 的参数,不包括模型中不需要训练的缓冲区(如 BatchNorm 中的 running mean)。 - 如果需要同时获取参数名称和参数值,应使用 `net.named_parameters()` 方法。 - 如果要保存或加载完整的模型状态,推荐使用 `net.state_dict()` 和 `net.load_state_dict()`,因为它们不仅包含参数值,还包含参数的命名信息[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值