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()

可视化后效果:

回归算法的损失函数:

Tensorflow实现损失函数_第1张图片

分类算法的损失函数:

Tensorflow实现损失函数_第2张图片

你可能感兴趣的:(Tensorflow)