Tensorflow实现损失函数

最近在学习tensorflow,今天特地总结下损失函数,多总结总是件好事,也方便大家查找。资料来源于《tensorflow机器学习实战指南》。

import tensorflow as tf
import matplotlib.pyplot as plt

回归算法损失函数

x_vals = tf.linspace(-1.,1.,500)
target = tf.constant(0.)

l2正则损失函数(即欧拉损失函数)

sess = tf.InteractiveSession()
l2_y_vals = tf.square(target-x_vals)
l2_y_out = sess.run(l2_y_vals)

l1正则损失函数(即绝对值损失函数)

l1_y_vals = tf.abs(target-x_vals)
l1_y_out = sess.run(l1_y_vals)

Pseudo-Huber损失函数

delta1 = tf.constant(0.25)
phuber1_y_vals = tf.multiply(tf.square(delta1),tf.sqrt(1.+tf.square((target-x_vals)/delta1))-1.)
phuber1_y_out = sess.run(phuber1_y_vals)
delta2 = tf.constant(5.)
phuber2_y_vals = tf.multiply(tf.square(delta2),tf.sqrt(1.+tf.square((target-x_vals)/delta2))-1.)
phuber2_y_out = sess.run(phuber2_y_vals)

回归算法的损失函数

x_array = sess.run(x_vals)
plt.plot(x_array,l2_y_out,'b-',label='L2 Loss')
plt.plot(x_array,l1_y_out,'r--',label='L1 Loss')
plt.plot(x_array,phuber1_y_out,'k-.',label = 'P-Huber Loss(0.25)')
plt.plot(x_array,phuber2_y_out,'g:',label= 'P-Huber Loss(5.)')
plt.ylim(-0.2,0.4)
plt.legend(loc='lower right',prop={'size':11})
plt.show()

这里写图片描述

分类算法损失函数

x_vals = tf.linspace(-3.,5.,500)
target = tf.constant(1.)
targets = tf.fill([500,],1.)

Hinge损失函数

hinge_y_vals = tf.maximum(0.,1.-tf.multiply(target,x_vals))
hinge_y_out = sess.run(hinge_y_vals)

两类交叉熵损失函数(cross_entropy loss)

xentropy_y_vals = -tf.multiply(target,tf.log(x_vals))-tf.multiply((1.-target),tf.log(1.-x_vals))
xentropy_y_out = sess.run(xentropy_y_vals)

sigmoid交叉熵损失函数(sigmoid cross entropy loss)

xentropy_sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(logits=x_vals,labels=targets)
xentropy_sigmoid_y_out = sess.run(xentropy_sigmoid_y_vals)

加权交叉熵损失函数(weighted cross entropy loss)

weight = tf.constant(0.5)
xentropy_weighted_y_vals = tf.nn.weighted_cross_entropy_with_logits(x_vals,targets,weight)
xentropy_weighted_y_out = sess.run(xentropy_weighted_y_vals)

softmax交叉熵损失函数(softmax cross entropy loss)

unscaled_logits = tf.constant([[1.,-3.,10.]])
target_dist = tf.constant([[0.1,0.02,0.88]])
softmax_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(logits=unscaled_logits,labels = target_dist)
sess.run(softmax_entropy)

稀疏softmax交叉熵损失函数(sparse softmax cross entropy loss)

unscaled_logits = tf.constant([[1.,-3.,10.]])
sparse_target_dist = tf.constant([2])
sparse_xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=unscaled_logits,labels=sparse_target_dist)
sess.run(sparse_xentropy)

分类算法损失函数

x_array = sess.run(x_vals)
plt.plot(x_array,hinge_y_out,'b-',label='Hinge Loss')
plt.plot(x_array,xentropy_y_out,'r--',label='Cross Entropy Loss')
plt.plot(x_array,xentropy_sigmoid_y_out,'k-.',label='Cross Entropy Sigmoid Loss')
plt.plot(x_array,xentropy_weighted_y_out,'g:',label='Weighted Cross Entropy Loss(x0.5)')
plt.ylim(-1.5,3)
plt.legend(loc='lower right',prop={'size':11})
plt.show()

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值