L2正则损失函数(即欧拉损失函数),L2正则损失函数是预测值与目标函数差值的平方和。L2正则损失函数是非常有用的损失函数,因为它在目标值附近有更好的曲度,并且离目标越近收敛越慢:

# L = (pred - actual)^2
l2_y_vals = tf.square(target - x_vals)
l2_y_out = sess.run(l2_y_vals)

L1正则损失函数(即绝对值损失函数)。与L2正则损失函数对差值求平方差不同的是,L1正则损失函数对差值求绝对值。L1正则在目标附近不平滑,这回导致算法不能很好的收敛。

# L = abs(pred - actual)
l1_y_vals = tf.abs(target - x_vals)
l1_y_out = sess.run(l1_y_vals)

Peseudo-Huber损失函数是Huber损失函数的连续、平滑估计,试图利用L1和L2正则消减极值处的陡峭,使得目标之附近连续。它的表达式依赖与参数delta。

# L = delta^2 * (sqrt(1 + ((pred - actual)/delta)^2) - 1)
delta1 = tf.constant(0.25) #delta=0.25的情况下
phuber1_y_vals = tf.multiply(tf.square(delta1), tf.sqrt(. + tf.square((target - x_vals)/delta1)) - .)
phuber1_y_out = sess.run(phuber1_y_vals)
delta2 = tf.constant(5.)  #delta=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)

利用matplotlib绘画出以上的损失函数为:

完整代码:

import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph() # Create graph
sess = tf.Session() #创建与预测函数序列和目标序列作为张量
x_vals = tf.linspace(-., ., )
target = tf.constant(.) #目标值为0 #L2正则损失函数(即欧拉损失函数)
# L = (pred - actual)^2
l2_y_vals = tf.square(target - x_vals)
l2_y_out = sess.run(l2_y_vals) #L1正则损失函数(即绝对值损失函数)
# L = abs(pred - actual)
l1_y_vals = tf.abs(target - x_vals)
l1_y_out = sess.run(l1_y_vals) #Peseudo-Huber损失函数是Huber损失函数的连续 平滑估计,
#利用L1和L2正则消减极值处的陡峭,使得目标之附近连续。
# L = delta^ * (sqrt( + ((pred - actual)/delta)^) - )
delta1 = tf.constant(0.25) #delta=0.25的情况下
phuber1_y_vals = tf.multiply(tf.square(delta1), tf.sqrt(. + tf.square((target - x_vals)/delta1)) - .)
phuber1_y_out = sess.run(phuber1_y_vals) delta2 = tf.constant(.) #delta=5的情况下
phuber2_y_vals = tf.multiply(tf.square(delta2), tf.sqrt(. + tf.square((target - x_vals)/delta2)) - .)
phuber2_y_out = sess.run(phuber2_y_vals) # Plot the output:
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': })
plt.show()

最新文章

  1. shell中{}的妙用
  2. [Ubuntu][Linux]更改PATH路径
  3. Servlet调用过程整理
  4. B2B多商铺初期权限数据库设计
  5. 使用 Git 来管理 Xcode 中的代码片段
  6. 昂贵的聘礼---poj1062(最短路)
  7. java 字符串(正则表达式)未完
  8. 如何让2个并列的div根据内容自动保持同等高度
  9. sudo gedit xx warning
  10. Confluent
  11. phpcms v9 在当前栏目下获取父栏目与当前栏目的名称与连接
  12. Ubuntu中MongoDB安装
  13. 前端自动化构建工具Gulp简单入门
  14. 用UE4蓝图制作FPS_零基础学虚幻4第二季
  15. Java_文件夹分割与合并
  16. 阿里云配置 https 证书
  17. 场景服务只创建了 Service Difinition 和feature layer
  18. jquery ajax中 php前台后台文件中编辑都是uft-8,返回数据还是乱码
  19. 平衡二叉树Balanced Binary Tree
  20. Windows程序设计(Charles Petzold)HELLOWIN程序实现

热门文章

  1. Linux服务器部署系列之一—Apache篇(上)
  2. UVa 11039 Building designing (贪心+排序+模拟)
  3. 20155336 2016-2017-2《JAVA程序设计》第六周学习总结
  4. PHP编译安装完成之后没有'php.ini'文件的处理方法
  5. H2Database聚合函数
  6. H2内存数据库支持存储到文件
  7. SSD测试第一神器——FIO
  8. html5 app开发
  9. 解决MS SQL Server 使用HashBytes函数乱码问题
  10. 实例化MD5CryptoServiceProvider报错:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分