Tensorflow实现损失函数

学习了一下用Tensorflow实现损失函数并且可视化的方法,代码如下,比较了4种回归算法的损失函数和4种分类算法的损失函数。
import matplotlib.pyplot as plt
sess = tf.Session()
# 用matplot绘制回归算法的损失函数
x_vals = tf.linspace(-1.,1.,500)
target = tf.constant(0.)
l2_y_vals = tf.square(target - x_vals)
l2_y_out = sess.run(l2_y_vals)
l1_y_vals = tf.abs(target-x_vals)
l1_y_out = sess.run(l1_y_vals)
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.0)')
plt.ylim(-0.2,0.4)
plt.legend(loc='lower right',prop={'size':11})
plt.show()
# 用matplot绘制分类算法的损失函数
x_vals = tf.linspace(-3.,5.,500)
target = tf.constant(1.)
targets = tf.fill([500,],1.)
hinge_y_vals = tf.maximum(0.,1.-tf.multiply(target,x_vals))
hinge_y_out = sess.run(hinge_y_vals)
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)
xentropy_sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(labels = targets,logits = x_vals)
xentropy_sigmoid_y_out = sess.run(xentropy_sigmoid_y_vals)
weight = tf.constant(0.5)
xentropy_weighted_y_vals = tf.nn.weighted_cross_entropy_with_logits(targets,x_vals,weight)
xentropy_weighted_y_out = sess.run(xentropy_weighted_y_vals)
plt.figure()
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()

可视化后效果:

回归算法的损失函数:


分类算法的损失函数:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值