概述
损失函数
- 定义系数
回归中定义了损失函数或目标函数,其目的是找到使损失最小化的系数
声明一个损失函数需要将 系数定义为变量,将数据集定义为占位符。可以有一个常学习率或变化的学习率和正则化常数。
为确保收敛,损失函数应为 凸的。一个 光滑的、可微分的凸损失函数可以提供更好的收敛性。随着学习的进行,损失函数的值应该下降,并最终变得稳定。
定义系数
在下面的代码中,设 m 是样本数量,n 是特征数量,P 是类别数量。这里应该在代码之前定义这些全局参数:
在标准线性回归的情况下,只有一个输入变量和一个输出变量:
import tensorflow.compat.v1 as tf
tf.disable_eager_execution()#保证sess.run()能够正常运行
sess=tf.InteractiveSession()
m=1000
n=15
p=2
X=tf.placeholder(tf.float32,name="X")
Y=tf.placeholder(tf.float32,name="Y")
w0=tf.Variable(0.0)
w1=tf.Variable(0.0)
Y_hat=X*w1+w0
#损失函数
loss=tf.square(Y-Y_hat,name='loss')
#多元线性回归情况 输入变量不止一个,可定义X 的大小为[m,n],m:样本数量,n:特征数量
X_1=tf.placeholder(tf.float32,name="X1",shape=[m,n])
Y_1=tf.placeholder(tf.float32,name="Y1")
w_1_0=tf.Variable(0.0)
w_1_1=tf.Variable(0.0)
Y_hat_1=tf.matmul(X_1,w_1_1)+w_1_0
loss_1=tf.reduce_mean(tf.square(Y_1-Y_hat_1))
#逻辑回归,损失函数定义为交叉熵
# 输出Y的维数等于训练数据集中的列别的数据,P为类别数量
X_2=tf.placeholder(tf.float32,name="X1",shape=[m,n])
Y_2=tf.placeholder(tf.float32,name="Y1",shape=[m,P])
w_2_0=tf.Variable(tf.zeros([1,P],name='bias'))
w_2_1=tf.Variable(tf.random_normal(n,1),name="weights")
Y_hat_2=tf.matmul(X_2,w_2_1)+w_2_0
entropy=tf.nn.softmax_cross_entropy_with_logits(Y_hat_2,Y_2)
loss_2=tf.reduce_mean(entropy)
#如果想把 L1 正则化加到损失上
lambd=tf.constant(0.8)
regularization_param=lamda*tf.reduce_sum(tf.abs(w_1_1))
loss_1+=regularization_param
#对L2正则化
regularization_param=lamda*tf.nn.l2_loss(tf.abs(w_1_1))
loss_1+=regularization_param
#由此,你应该学会了如何实现不同类型的损失函数。那么根据手头的回归任务,你可以选择相应的损失函数或设计自己的损失函数。在损失项中也可以结合 L1 和 L2 正则化。
最后
以上就是生动寒风为你收集整理的TensorFlow损失函数定义系数的全部内容,希望文章能够帮你解决TensorFlow损失函数定义系数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复