批量归一化
批量归一化层,它能让较深的神经网络的训练变得更加容易。
• 对输入的标准化(浅层模型)
处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。
标准化处理输入数据使各个特征的分布相近
• 批量归一化(深度模型)
利用小批量上的均值和标准差,不断调整神经网络中间输出,从而使整个神经网络在各层的中间输出的数值更稳定。
1.对全连接层做批量归一化
全连接层的批量归一化层,置于全连接层中的仿射变换和激活函数之间。
2.对卷积层做批量归一化
对卷积层做批量归一化,置于卷积计算之后、应用激活函数之前。
3.预测时的批量归一化
训练时:以batch为单位,对每个batch计算均值和方差。
预测时:用移动平均估算整个训练数据集的样本均值和方差。
批量归一化的pytorch 简洁实现
import torch
from torch import nn, optim
import torch.nn.functional as F
import sys
sys.path.append(".")
import d2lzh_pytorch as d2l
net = nn.Sequential(
nn.Conv2d(1, 6, 5), # in_channels, out_channels, kernel_size
nn.BatchNorm2d(6),
nn.Sigmoid(),
nn.MaxPool2d(2, 2), # kernel_size, stride
nn.Conv2d(6, 16, 5),
nn.BatchNorm2d(16),
nn.Si