python - 为什么 Pytorch Dropout 层会影响所有值,而不仅仅是设置为零的值?
问题描述
Pytorch 的 dropout 层会更改未设置为零的值。使用 Pytorch 的文档示例:(来源):
import torch
import torch.nn as nn
m = nn.Dropout(p=0.5)
input = torch.ones(5, 5)
print(input)
tensor([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
然后我通过dropout
一层:
output = m(input)
print(output)
tensor([[0., 0., 2., 2., 0.],
[2., 0., 2., 0., 0.],
[0., 0., 0., 0., 2.],
[2., 2., 2., 2., 2.],
[2., 0., 0., 0., 2.]])
未设置为零的值现在是 2。为什么?
解决方案
这就是 dropout 正则化的工作原理。在 dropout 之后,这些值除以保持概率(在本例中为 0.5)。
由于 PyTorch Dropout 函数接收归零神经元的概率作为输入,如果你使用nn.Dropout(p=0.2)
它意味着它有 0.8 的机会保持。所以表上的值将是 1/(1-0.2)。
这被称为“反向 dropout 技术”,这样做是为了确保激活的预期值保持不变。
推荐阅读
- android - OKHttpClient 响应 - 错误请求
- amazon-web-services - 如何查找之前创建的 EC2 实例、弹性 IP 和安全组入站规则?
- python - 主成分分析 - 三个类别混合在三个单独的组中
- spring-boot - springboot和ionic如何通信?
- python - 为什么我在尝试运行 celery beat 时收到 KeyError: 'scheduler'?
- python - 使用 Python 可视化 Moiton Capture 数据
- c++ - 无法编译 opencv:未定义的参考 imread 等
- python - 如何在没有 tts 读取的情况下使用 discord.py 发送消息?
- java - 使用 IntentService 和 PendingIntent 接收后台位置更新
- redis - 将 redis-rs 与 actix-web 一起使用