“原地修改权重”(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 的一种命名约定,标识该函数会直接修改输入张量(这里是权重)的值,而不是返回新的张量。
702

被折叠的 条评论
为什么被折叠?



