论文要点:BatchNorm(模型M+公式F+代码C)

# batchnorm

1. 代码

import torch
from torch import nn
from d2l import torch as d2l、

# moving_mean, moving_var 近似看作整个数据集上的均值和方差,
# eps是epsilon, momentum(通常=0.9)用来更新moving_mean, moving_var 
def batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):
    # 通过is_grad_enabled来判断当前模式是训练模式(enabled),还是预测模式(not is_grad_enabled)
    if not torch.is_grad_enabled():
        # 如果是在预测模式下,直接使用传入的moving_mean, moving_var做标准化
        X_hat = (X - moving_mean) / torch.sqrt(moving_var + eps)
    else:
        # X.shape=2 是全连接层,=4是2D卷积层
        assert len(X.shape) in (2, 4)
        if len(X.shape) == 2:
            # 若为全连接,按列求特征的均值和方差
            mean = X.mean(dim=0)
            var = ((X - mean) ** 2).mean(dim=0)
        else:
            # 若2D卷积层, 计算axis=1的均值和方差
            # X 保持形状以做broadcasting,(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值