损失函数

TensorFlow损失函数

目的是找到使损失最小化的系数
声明一个损失函数需要将系数定义为变量,将数据集定义为占位符。可以有一个常学习率或变化的学习率和正则化常数。
设 m 是样本数量,n 是特征数量,P 是类别数量。应该在代码之前定义这些全局参数:

m=1000
n=15
P=2

标准线性回归的情况下,只有一个输入变量和一个输出变量:

#训练数据的占位符
X=tf.placeholder(tf.float32,name='X')
Y=tf.placeholder(tf.float32,name='Y')

#变量初始化为0
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=tf.placeholder(tf.float32,name='X',shape=[m,n])
Y=tf.placeholder(tf.float32,name='Y')

#变量初始化为0
w0=tf.Variable(0.0)
w1=tf.Variable(tf.random_normal([n,1]))

#线性回归模型
Y_hat=tf.matmul(X,w1)+w0

#损失函数
loss=tf.reduce_mean(tf.square(Y-Y_hat,name='loss'))

逻辑回归的情况下,损失函数定义为交叉熵。输出 Y 的维数等于训练数据集中类别的数量,其中 P 为类别数量:

#训练数据的占位符
X=tf.placeholder(tf.float32,name='X',shape=[m,n])
Y=tf.placeholder(tf.float32,name='Y',shape=[m,p])

#变量初始化为0
w0=tf.Variable(0tf.zeros([1,P]),name='bias')
w1=tf.Variable(tf.random_normal([n,1]),name='weights')

#线性回归模型
Y_hat=tf.matmul(X,w1)+w0

#损失函数
entropy=tf.nn.softmax_cross_entropy_with_logits(Y_hat,Y)
loss=tf.reduce_mean(entropy)

若想把 L1 正则化加到损失上,那么:

lamda=tf.constant(0.8) #正则化参数
regularization_param=lamda*tf.reduce_sum(tf.abs(w1))

#新损失
loss+=regularization_param

对于== L2 正则化==

lamda=tf.constant(0.8) #正则化参数
regularization_param=lamda*tf.nn.12_loss(w1)

#新损失
loss+=regularization_param
  • 为确保收敛,损失函数应为凸的。一个光滑的、可微分的凸损失函数可以提供更好的收敛性。随着学习的进行,损失函数的值应该下降,并最终变得稳定。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值