其他分享
首页 > 其他分享> > TensorFlow2.0从入门到进阶——第二章 问题记录总结

TensorFlow2.0从入门到进阶——第二章 问题记录总结

作者:互联网

 

看的视频——https://www.bilibili.com/video/av79196096?p=23

优化方法———sgd与adm:

https://www.cnblogs.com/guoyaohua/p/8542554.html

sgd——随机梯度下降,比其它算法用的时间长,而且可能会被困在鞍点

adm——增加了动量(指数加权平均),在梯度不变的方向速度变快,梯度变化的方向速度变慢。

激活函数——selu:

自带批归一化功能的激活函数

for _ in range(20):
    #激活函数放到批归一化之前
    model.add(keras.layers.Dense(100,activation="relu"))
    model.add(keras.layers.BatchNormalization())
    """
    #激活函数放到批归一化之后
    model.add(keras.layers.Dense(100))
    model.add(keras.layers.BatchNormalization())
    model.add(keras.layers.Activation('relu'))
    """
model.add(keras.layers.Dense(10,activation="softmax"))

与下面等价:

for _ in range(20):
    #激活函数放到批归一化之前
    #自带归一化功能的激活函数——selu
    model.add(keras.layers.Dense(100,activation="selu"))
model.add(keras.layers.Dense(10,activation="softmax"))

https://www.jianshu.com/p/3a43a6a860ef

https://www.jianshu.com/p/d216645251ce

批归一化:

https://www.cnblogs.com/skyfsm/p/8453498.html

它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散”的问题,从而使得训练深层网络模型更加容易和稳定。

BN的本质就是利用优化变一下方差大小和均值位置,使得新的分布更切合数据的真实分布,保证模型的非线性表达能力。BN的极端的情况就是这两个参数等于mini-batch的均值和方差,那么经过batch normalization之后的数据和输入完全一样,当然一般的情况是不同的。

若神经网络训练时遇到收敛速度较慢,或者“梯度爆炸”等无法训练的情况发生时都可以尝试用BN来解决。同时,常规使用情况下同样可以加入BN来加速模型训练,甚至提升模型精度。

梯度消失:深度神经网络  反向传播 链式法则 前面的更新缓慢
https://www.jianshu.com/p/3f35e555d5ba
#接近于输出层的隐藏层由于其梯度相对正常,所以权值更新时也就相对正常,但是当越靠近输入层时,由于梯度消失现象,会导致靠近输入层的隐藏层权值更新缓慢或者更新停滞。这就导致在训练时,只等价于后面几层的浅层网络的学习。

从求导结果可以看出,Sigmoid导数的取值范围在0~0.25之间,而我们初始化的网络权值通常都小于1,因此,当层数增多时,小于0的值不断相乘,最后就导致梯度消失的情况出现。同理,梯度爆炸的问题也就很明显了,就是当权值过大时,导致 ,最后大于1的值不断相乘,就会产生梯度爆炸。

梯度消失和梯度爆炸本质上是一样的,都是因为网络层数太深而引发的梯度反向传播中的连乘效应。

解决方法: 换用Relu、LeakyRelu、Elu等激活函数
BatchNormalization BN本质上是解决传播过程中的梯度问题

callbacks:

#callback
# Tensorboard 文件夹
#modelcheckpoint文件名
#earlystopping
logdir = os.path.join('callbacks')
if not os.path.exists(logdir):
    os.mkdir(logdir)
output_model_file = os.path.join(logdir,"fashion_mnist_model.h5")
#https://blog.csdn.net/weixin_41010198/article/details/102815483
callbacks = [
        keras.callbacks.TensorBoard(logdir),
        keras.callbacks.ModelCheckpoint(output_model_file,save_best_only = True),
        keras.callbacks.EarlyStopping(patience=5,min_delta = 1e-3),
    
]
history = model.fit(x_train_scaled,y_train,epochs = 10,validation_data = (x_valid_scaled,y_valid),callbacks = callbacks)

 

ccccccccccs 发布了53 篇原创文章 · 获赞 17 · 访问量 2万+ 私信 关注

标签:layers,进阶,keras,梯度,TensorFlow2.0,callbacks,add,model,入门
来源: https://blog.csdn.net/cswoniu111/article/details/104589327