PyTorch笔记9-Batch Normalization

本文是PyTorch教程笔记,探讨Batch Normalization(BN)如何加速神经网络训练,解决内部协变量转移问题。通过示例展示BN在神经网络结构中的使用,并通过对比训练效果说明BN能改善模型的收敛速度和泛化能力。
摘要由CSDN通过智能技术生成

本系列笔记为莫烦PyTorch视频教程笔记

github源码

概要

我们知道 normalize input(归一化输入)可以加速神经网络的训练,那我们是否可以 normalize activation function 并 speed up 网络训练呢,这就是 Batch Normalization(BN) 了,直观上,BN 和归一化输入一样有效。在深度网络的训练中,每一层网络的输入都会因为前一层网络参数的变化导致其分布发生改变,这就要求我们必须使用一个很小的学习率和对参数很好的初始化,但是这么做会让训练过程变得慢而且复杂,这种现象称作 “Internal Covariate Shift”。
对于一个神经网络,前面 layer 的 weight 不断变化时,就会带来后面的 weight 不断变化,而 BN 可以弱化隐藏层权重分布变化的程度,即重整了 Z(Z是关于 weight 和 bias 的线性函数),限制了前面 layer 参数更新而影响 Z 数值分布的程度,使这些数值变得更加稳定,削弱了前面 layer 和 后面 layer 之间的耦合程度,使每一层不过多依赖前面的 layer,最终 speed up 整个网络的训练。
下面演示 BN 的作用

import torch
from torch import nn
from torch.nn import init
from torch.autograd import Variable
import torch.utils.data as Data
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as np

torch.manual_seed(1)
np.random.seed(1)

%matplotlib inline

生成数据

人工伪造数据,用来模拟真实情况,

# train data size
DATA_SIZE = 2000
# mini batch size, 2^n
BATCH_SIZE = 64

# fake data
# training set
# The newa
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值