tensorflow之神经网络优化

损失函数(loss):用来表示预测值(y)与已知答案(y_)的差距。在神经网络时,通过不断改变神经网络中所有参数,使得损失函数不断减小,从而训练出更高准确率的神经网络模型。

常用的损失函数有均方误差、自定义和交叉熵等。

均方误差mse:n个样本的预测值y与已知答案y_之差的平方和,再求平均值。


例子:预测酸奶日销量 y,x1和 x2是影响日销量的两个因素。 




销量预测结果为y = 0.98*x1 + 1.02*x2,与生成数据集时的标准答案y = x1 + x2非常的接近,说明该神经网络预测酸奶日销量正确。

自定义损失函数:根据问题的实际情况,定制合理的损失函数。

例如:

对于预测酸奶日销量问题,如果预测销量大于实际销量则会损失成本;如果预测销量小于实际销量则会损失利润。


损失函数表示,若预测结果 损失函数表示,若预测结果 y小于标准答案 y_,损失函数为利润乘以预测结果 ,损失函数为利润乘以预测结果 y与标准答案 与标准答案 y_之差; 若预测结果 y大于标准答案 大于标准答案 y_,损失函数为成本乘以预测结果 ,损失函数为成本乘以预测结果 y与标准答案 与标准答案 y_之差。

用tensorflow函数表示为:

loss = tf.reduce_sum(tf.where(tf.greater(y,y_),COST(y-y_),PROFIT(y_-y)))

① 若酸奶成本为 1元,酸奶销售利润为 9元,则制造成本小于酸奶利润因此希望预测 的结果 y多 一些 。采用上述自定义损失函数。




销量预测结果为y = 1.02*x1 + 1.04*x2。

②若酸奶成本为 9元,酸奶销售利润为 1元,则制造成本大于酸奶利润因此希望预测结果 y小一 些。




销量的预测结果为y=0.97*x1 +0.98*x2,成本大,往少的方向预测。

交叉熵:表示两个概率分布之间的距离。交叉熵越大,两个概率分布距离越远,两个概率分布越相异;交叉熵越小,两个概率分布距离越近,两个概率分布越相似。

交叉熵计算公式:


用Tensorflow函数表示为:

ce = -tf.reduce_mean(y*tf.log(tf.clip_by_value(y,1e-12,1.0)))

softmax函数:将n分类的n个输出(y1,y2...yn)变为满足以下概率分布要求的函数。


softmax函数表示为:

在Tensorflow中,一般让模型的输出经过softmax函数,以获得输出分类的概率分布,再与标准答案对比,求出交叉熵,得到损失函数,用如下函数表示:

ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))

cem = tf.reduce_mean(ce)

学习率learning_rate:表示了每次参数更新的幅度大小。学习率过大,会导致待优化的参数在最小值附近波动,不收敛;学习率过小,会导致待优化的参数收敛缓慢。

在训练的过程中,参数的更新向着损失函数梯度下降的方向。

假设损失函数为loss = (w+1)*(w+1),如果参数的初值为5,学习率为0.2,



由结果可知,随着损失函数值得减小,w无限趋于-1,模型计算推测出最优参数w = -1.

学习率的设置:学习率过大,会导致待优化的参数在最小值附近波动,不收敛;学习率过小,会导致待优化的参数收敛缓慢。

修改学习率为1


如果将学习率改为0.0001,则


损失函数缓慢下降,w值也在小幅度变化,收敛缓慢。

指数衰减学习率 指数衰减学习率 指数衰减学习率 :学习率随着训练轮数变化而动态更新

学习率计算公式如下: Learning_rate=LEARNING_RATE_BASE*LEARNING_RATE_DECAY*

LEARING_RATE_BASE为学习率初始值,LEARNING_RATE_DECAY为学习率衰减率,global_step记录了当前训练轮数,为不可训练型参数。学习率learning_rate更新频率为输入数据集总样本数除以每次喂入样本数。staircase为true,global_step/learning_rate_step取整数,学习率阶梯型衰减;staircase为false,学习率是一条平滑下降的曲线。



滑动平均值:记录了一段时间内模型中所有参数w和b各自的平均值。利用滑动平均值可以增强模型的泛化能力。



过拟合:神经网络模型在训练数据上的准确率较高,在新的数据进行预测或分类时准确率较低,说明模型的泛化能力差。

正则化:在损失函数中每个参数w加上权重,引入模型复杂度指标,从而抑制模型噪声,减小过拟合。


例如:用300个符合正态分布的点X[x0,x1]作为数据集,根据点X[x0,x1]计算生成标注Y_,将数据集标注为红色点和蓝色点。

规则:x0*x0+x1*x1<2,y_=1,标注为红色;x0*x0+x1*x1>=2,y_=0标注为蓝色。

分别用无正则化和有正则化两种方法拟合曲线,把红色和蓝色点分开。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值