神经网络基础-神经网络补充概念-53-将batch norm拟合进神经网络

代码实现

python 复制代码
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, BatchNormalization, Activation
from tensorflow.keras.optimizers import SGD

# 生成随机数据
np.random.seed(0)
X = np.random.rand(100, 10)
y = np.random.randint(2, size=(100, 1))

# 构建神经网络模型
model = Sequential()

# 添加输入层
model.add(Dense(32, input_dim=10))
model.add(BatchNormalization())
model.add(Activation('relu'))

# 添加隐含层
model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation('relu'))

# 添加输出层
model.add(Dense(1, activation='sigmoid'))

# 编译模型
model.compile(optimizer=SGD(lr=0.01), loss='binary_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(X, y, epochs=50, batch_size=32)

为什么BN会生效

梯度消失问题的缓解:在深度神经网络中,梯度消失是一个常见的问题,特别是在深层网络中。批归一化通过在每个批次内对输入进行标准化,使得激活函数的输入分布更稳定,从而减轻了梯度消失问题,使得梯度更容易传播,促进了训练过程的稳定性和效率。

加速收敛:由于批归一化在每个批次内对输入进行了标准化,网络的参数可以更快地收敛到合适的范围,从而加速了训练的收敛速度。这意味着在相同迭代次数下,批归一化的网络可以取得更好的效果。

模型稳定性:批归一化有助于减少模型在训练过程中的震荡,使得网络更加稳定。它通过对每个批次的统计信息进行标准化,减小了参数的更新幅度,从而减少了训练过程中的不稳定性。

泛化能力提升:批归一化对输入数据的标准化可以使模型对不同尺度、分布的数据更具有鲁棒性,从而提高了模型的泛化能力,使其在测试数据上表现更好。

正则化效果:批归一化在每个批次内引入了一些噪声,类似于 dropout,有助于模型的正则化,减少过拟合问题。

相关推荐
机器之心23 分钟前
让AI自我进化?斯坦福华人博士答辩视频火了,庞若鸣参与评审
人工智能·openai
iceiceiceice36 分钟前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
AI攻城狮2 小时前
RAG Chunking 为什么这么难?5 大挑战 + 最佳实践指南
人工智能·云原生·aigc
yiyu07162 小时前
3分钟搞懂深度学习AI:梯度下降:迷雾中的下山路
人工智能·深度学习
掘金安东尼2 小时前
玩转龙虾🦞,openclaw 核心命令行收藏(持续更新)v2026.3.2
人工智能
demo007x2 小时前
万字长文解读ClaudeCode/KiloCode 文件处理技术
人工智能·claude·trae
aircrushin3 小时前
OpenClaw开源生态与AI执行能力的产业化路径
人工智能
是糖糖啊3 小时前
OpenClaw 从零到一实战指南(飞书接入)
前端·人工智能·后端
踩着两条虫3 小时前
从设计稿到代码:VTJ.PRO 的 AI 集成系统架构解析
前端·vue.js·人工智能
孤烟3 小时前
吓瘫!我用1行代码攻破公司自研AI权限系统,数据裸奔一整夜(附攻击payload+防御源码)
人工智能·ai编程