如何理解原地修改权重(in-place modification)

部署运行你感兴趣的模型镜像

“原地修改权重”(in-place modification)指的是函数直接修改输入对象本身的值,而不是创建一个新的对象并返回。在 nn.init.kaiming_normal_(conv_layer.weight, ...) 中,这个特性体现在:

具体解释:

  • conv_layer.weight 是卷积层的权重参数(一个张量),初始时已经存在(有默认的随机值)。
  • 当调用 nn.init.kaiming_normal_(conv_layer.weight, ...) 时,函数会直接对 conv_layer.weight 这个张量内部的值进行修改,用符合 He 正态分布的新值覆盖原来的默认值。
  • 整个过程不会创建一个新的权重张量,也不需要手动将返回值赋值给 conv_layer.weight(因为原张量已经被修改)。

对比 “非原地操作”:

如果函数不是 “原地修改”(比如没有下划线_的版本,假设存在 nn.init.kaiming_normal),则需要手动将返回的新张量赋值给权重,例如:

# 非原地操作(假设)
new_weight = nn.init.kaiming_normal(conv_layer.weight, ...)  # 创建新张量
conv_layer.weight = new_weight  # 手动赋值

而带 _ 的原地函数则简化了这个过程:

# 原地操作(实际用法)
nn.init.kaiming_normal_(conv_layer.weight, ...)  # 直接修改原张量,无需手动赋值

为什么设计 “原地修改”?

  • 节省内存:避免创建新的张量对象,尤其对于大型模型的权重参数,能减少内存占用。
  • 代码简洁:无需显式赋值,直接修改原参数,让初始化代码更简洁。

总结:kaiming_normal_ 中的下划线 _ 是 PyTorch 的一种命名约定,标识该函数会直接修改输入张量(这里是权重)的值,而不是返回新的张量。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值