Tensorflow2.0笔记 - BatchNormalization

本笔记记录BN层相关的代码。关于BatchNormalization,可以自行百度,或参考这里:

一文读懂Batch Normalization - 知乎神经网络基础系列: 《深度学习中常见激活函数的原理和特点》《过拟合: dropout原理和在模型中的多种应用》深度模型的基础结构是MLP,模型训练和调参的复杂性随着模型深度的增加而加大,这使得算法工程师在业务中...https://zhuanlan.zhihu.com/p/594944859#:~:text=Batch,normalization%E7%9A%84%E6%80%9D%E8%B7%AF%E5%BE%88%E7%AE%80%E5%8D%95%EF%BC%8C%E5%AF%B9%E8%BE%93%E5%85%A5%E7%9A%84%E6%95%B0%E6%8D%AE%E5%9C%A8%E6%AF%8F%E4%B8%AA%E7%BB%B4%E5%BA%A6%E4%B8%8A%E8%BF%9B%E8%A1%8C%E6%A0%87%E5%87%86%E5%8C%96%E5%A4%84%E7%90%86%EF%BC%8C%E5%86%8D%E8%BF%9B%E8%A1%8C%E7%BA%BF%E6%80%A7%E5%8F%98%E6%8D%A2%EF%BC%8C%E4%BB%A5%E7%BC%93%E8%A7%A3%E5%9B%A0%E6%A0%87%E5%87%86%E5%8C%96%E5%AF%BC%E8%87%B4%E7%9A%84%E6%95%B0%E6%8D%AE%E8%A1%A8%E5%BE%81%E8%83%BD%E5%8A%9B%E7%9A%84%E4%B8%8B%E9%99%8D%E3%80%82Batch Normalization(BN)超详细解析_batchnorm在预测阶段需要计算吗-CSDN博客文章浏览阅读3.7w次,点赞109次,收藏458次。单层视角神经网络可以看成是上图形式,对于中间的某一层,其前面的层可以看成是对输入的处理,后面的层可以看成是损失函数。一次反向传播过程会同时更新所有层的权重W1,W2,...,WL,前面层权重的更新会改变当前层输入的分布,而跟据反向传播的计算方式,我们知道,对Wk的更新是在假定其输入不变的情况下进行的。如果假定第k层的输入节点只有2个,对第k层的某个输出节点而言,相当于一个线性模型y=w1x1+w2x..._batchnorm在预测阶段需要计算吗https://blog.csdn.net/weixin_44023658/article/details/105844861

import os
import time
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics, Input

os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
#tf.random.set_seed(12345)
tf.__version__

#下面的x中的数据按照均值是1,标准差为0.5的正态分布排布,通过BatchNormalization进行修正
x = tf.random.normal([2, 4, 4, 3], mean=1., stddev=0.5)
net = layers.BatchNormalization(axis=3)
out = net(x, training=True)

print("Variables:\n", net.variables)

#设置优化器
optimizer = optimizers.Adam(learning_rate=1e-4)

for i in range(100):
    with tf.GradientTape() as tape:
        #进行100次BN层前向传播,moving_mean和moving_variance会变化
        out = net(x, training=True)
        #自定义损失函数是均值和1的距离
        loss = tf.reduce_mean(tf.pow(out, 2)) - 1
    #进行梯度更新, gamma和beta会变化
    grads = tape.gradient(loss, net.trainable_variables)
    optimizer.apply_gradients(zip(grads, net.trainable_variables))

print("Trained 100 times:\n", net.variables)

运行结果:

相关推荐
深蓝海拓6 分钟前
基于深度学习的视觉检测小项目(十六) 用户管理界面的组态
人工智能·python·深度学习·qt·pyqt
Qhumaing9 分钟前
Python学习——函数参数详解
开发语言·python·学习
Icomi_21 分钟前
【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙
c语言·c++·人工智能·pytorch·python·机器学习·计算机视觉
沐雪架构师23 分钟前
AI大模型开发原理篇-4:神经概率语言模型NPLM
人工智能·语言模型·自然语言处理
道友老李26 分钟前
【自然语言处理(NLP)】多头注意力(Multi - Head Attention)原理及代码实现
人工智能·自然语言处理
逐梦苍穹33 分钟前
神经网络的数据流动过程(张量的转换和输出)
人工智能·深度学习·神经网络
我的运维人生1 小时前
计算机视觉:解锁智能时代的钥匙与实战案例
人工智能·计算机视觉·运维开发·技术共享
ahardstone1 小时前
【CS61A 2024秋】Python入门课,全过程记录P5(Week8 Inheritance开始,更新于2025/2/2)
开发语言·python
MoRanzhi12032 小时前
亲和传播聚类算法应用(Affinity Propagation)
人工智能·python·机器学习·数学建模·scikit-learn·聚类
金融OG2 小时前
99.23 金融难点通俗解释:小卖部经营比喻PPI(生产者物价指数)vsCPI(消费者物价指数)
人工智能·python·机器学习·数学建模·金融·数据可视化