首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用分层规范/批处理规范?

何时使用分层规范/批处理规范?
EN

Stack Overflow用户
提问于 2019-06-11 00:39:37
回答 1查看 6.1K关注 0票数 2

当你设计一个网络时,你应该把规范化连接到哪里?例如,如果你有一个堆叠的变压器或注意力网络,在你有一个密集的层之后,在任何时候正常化是否有意义?

EN

回答 1

Stack Overflow用户

发布于 2019-06-12 10:39:23

原纸试图解释的是减少过度使用批处理标准化。

当你设计一个网络时,你应该把规范化连接到哪里?

在输入的早期设置规范化。不平衡的输入极值会导致不稳定。

如果您对输出进行正常化,这将不会阻止输入再次造成不稳定。

下面是解释BN所做的事情的小代码:

代码语言:javascript
复制
import torch
import torch.nn as nn

m = nn.BatchNorm1d(100, affine=False)
input = 1000*torch.randn(3, 100)
print(input)
output = m(input)
print(output)
print(output.mean()) # should be ~ 0
print(output.std()) # should be ~ 1

在你有一个致密的图层之后,任何时候正常化是否有意义?

是的,你可以这样做,因为矩阵乘法可能会导致极值。此外,卷积层后,因为这些也是矩阵乘法,类似但不太强烈的密集(nn.Linear)层。例如,如果您打印resent模型,您将看到每次在conv层之后设置批处理规范,如下所示:

代码语言:javascript
复制
(conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

要打印完整的resnet,可以使用以下内容:

代码语言:javascript
复制
import torchvision.models as models
r = models.resnet18()
print(r)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56535040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档