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

为何nn.Dropout会改变张量元素的值?技术咨询

PyTorch nn.Dropout层数值缩放问题解析

你的代码示例:

dropout = nn.Dropout(0.1)
y = torch.tensor([5.0,7.0,9.0])
y = dropout(y)
print(y)

输出示例:

tensor([ 5.5556, 7.7778, 10.0000])

核心原因:Dropout的反向缩放机制

PyTorch的nn.Dropout采用**反向丢弃(Inverted Dropout)**实现,这是当前主流的Dropout实现逻辑,分为两步:

  • 以指定概率p随机将部分元素置零
  • 对未被置零的元素,除以(1-p)进行缩放

你设置的丢弃概率p=0.1,对应1-p=0.9,计算后正好得到你看到的结果:

  • 5.0 / 0.9 ≈ 5.5556
  • 7.0 / 0.9 ≈ 7.7778
  • 9.0 / 0.9 = 10.0

为什么要做缩放?

这种设计是为了保证训练和推理阶段的输出期望一致:

  • 训练时,每个元素有p的概率被丢弃,若不缩放,输出的期望会是原数值 × (1-p)
  • 推理阶段会关闭Dropout,所有元素都参与计算,此时输出会比训练时高1/(1-p)倍,导致模型表现异常
  • 通过反向缩放,训练时保留的元素被放大1/(1-p)倍,让训练阶段的输出期望和原输入一致,推理时直接关闭Dropout即可,无需额外调整

关于随机置零

你多次运行偶尔出现零元素,是Dropout的随机丢弃行为导致的——每次运行时,被选中丢弃的元素位置是随机的,这也是Dropout防止模型过拟合的核心逻辑。

内容的提问来源于stack exchange,提问作者Ezra Corli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:13:15