指数衰减学习率、交叉熵、正则化

指数衰减学习率
在进行网络训练过程中:当学习率过小时,参数W更新过慢;当学习率过大时,参数W不收敛。
指数衰减学习率 = 初始学习率学习率衰减率^(当前轮数/多少轮衰减一次)
学习率表征参数每次更新的幅度:Wt+1 = Wt - lr
d(loss)/d(Wt),其中lr为学习率。
指数衰减学习率就是先使用较大的学习率,快速找到较优值,然后逐步减小学习率使模型找到最优解。
代码实现如下:

import tensorflow as tf

w = tf.Variable(tf.constant(5, dtype=tf.float32))
epoch = 40
LR_BASE = 0.2    # 最初学习率
LR_DECAY = 0.99  # 学率习衰减率
LR_STEP = 1      # 喂入多少轮BATCH_SIZE后,更新一次学习率

for epoch in range(epoch):  # for epoch 定义顶层循环,表示对数据集循环epoch次,此例数据集数据仅有1个w,初始化时候constant赋值为5,循环100次迭代。
    lr = LR_BASE * LR_DECAY ** (epoch / LR_STEP)
    with tf.GradientTape() as tape:  # with结构到grads框起了梯度的计算过程。
        loss = tf.square(w + 1)
    grads = tape.gradient(loss, w)  # .gradient函数告知谁对谁求导
    w.assign_sub(lr * grads)  # .assign_sub 对变量做自减 即:w -= lr*grads 即 w = w - lr*grads
    print("After %s epoch,w is %f,loss is %f,lr is %f" % (epoch, w.numpy(), loss, lr))

交叉熵损失函数
交叉熵(categorical_crossentropy)损失函数表征两个函数概率分布之间的距离,计算公式为:
H(y_, y) = -Σy_* lny ,其中y_为标准答案,y为预测大答案。
交叉熵越大,两个概率分布越远;交叉熵越小,两个概率分布越近。
在这里插入图片描述
代码实现如下:

import tensorflow as tf

loss_ce1 = tf.losses.categorical_crossentropy([1, 0], [0.6, 0.4])
loss_ce2 = tf.losses.categorical_crossentropy([1, 0], [0.8, 0.2])
print("loss_ce1:", loss_ce1)
print("loss_ce2:", loss_ce2)

在执行分类的同时,通常softmax函数和交叉熵结合使用,即输出先同归softmax函数进行归一化,让输出结果符合概率分布,再计算y_与y的交叉熵损失函数。
代码实现如下:

# softmax与交叉熵损失函数的结合
import tensorflow as tf
import numpy as np

y_ = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 1, 0]])
y = np.array([[12, 3, 2], [3, 10, 1], [1, 2, 5], [4, 6.5, 1.2], [3, 6, 1]])
y_pro = tf.nn.softmax(y)
loss_ce1 = tf.losses.categorical_crossentropy(y_, y_pro)
loss_ce2 = tf.nn.softmax_cross_entropy_with_logits(y_, y)

print('softmax计算的结果:\n', y_pro)
print('分步计算的结果:\n', loss_ce1)
print('结合计算的结果:\n', loss_ce2)

# 输出的结果相同
# 先用softmax函数让输出结果符合概率分布,再求交叉熵ce损失函数
# 这里loss_ce2可以直接替代y_pro + loss_ce2

正则化
正则化在损失函数中引入模型复杂指标,利用给w加权值,弱化训练数据的噪声,即loss的表达式为:
loss = loss(y与y_) + REGULARIZER*loss(w)
其中: loss(y与y_)为模型中所有参数的损失函数,如交叉熵或均方误差;REGULARIZER为正则化超参数,给出w在loss中的比例,即正则化的权重;loss(w)为需要正则化的参数。
关于正则化的更多信息可以参考:https://charlesliuyx.github.io/2017/10/03/%E3%80%90%E7%9B%B4%E8%A7%82%E8%AF%A6%E8%A7%A3%E3%80%91%E4%BB%80%E4%B9%88%E6%98%AF%E6%AD%A3%E5%88%99%E5%8C%96/

文章全部内容参考中国大学MOOC曹健老师的人工智能实践:tensorflow笔记2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值