Neural network 何时使用图层格式/批次规范?

Neural network 何时使用图层格式/批次规范?,neural-network,deep-learning,pytorch,Neural Network,Deep Learning,Pytorch,设计网络时,应在何处拼接规范化?例如,如果你有一个堆叠的变压器或注意网络,在你有一个致密层后的任何时候进行规范化是否有意义?试图解释的是减少过度拟合使用批量规范化 设计网络时,应在何处拼接规范化 在输入的早期设置规范化。不平衡的输入极值可能导致不稳定 而如果对输出进行规格化,则不会阻止输入再次导致不稳定性 下面是解释BN的功能的小代码: import torch import torch.nn as nn m = nn.BatchNorm1d(100, affine=False) input

设计网络时,应在何处拼接规范化?例如,如果你有一个堆叠的变压器或注意网络,在你有一个致密层后的任何时候进行规范化是否有意义?

试图解释的是减少过度拟合使用批量规范化

设计网络时,应在何处拼接规范化

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

而如果对输出进行规格化,则不会阻止输入再次导致不稳定性

下面是解释BN的功能的小代码:

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
)层类似,但强度较低。例如,如果您打印重新提交的模型,您将看到每次在conv层之后都会设置批处理规范,如下所示:

(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,您可以使用以下方法:

import torchvision.models as models
r = models.resnet18()
print(r)