#**********************回归损失
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.Session()
# Various Predicted X-values
x_vals = tf.linspace(-1., 1., 500)
# Create our target of zero
target = tf.constant(0.)
# L2正则损失函数
#即欧拉损失函数。L2正则损失函数是预测值与目标值差值的平方和。L2正则损失函数是非常有用的损失函数,因为它在目标值附近有更好的曲度,机器学习算法利用这点收敛,并且离目标越近收敛越慢。
# L2 loss
# L = (pred - actual)^2
l2_y_vals = tf.square(target - x_vals)
l2_y_out = sess.run(l2_y_vals)
#即绝对值损失函数。与L2正则损失函数对差值求平方不同的是,L1正则损失函数对差值求绝对值。L1正则在目标值附近不平滑,这会导致算法不能很好地收敛。
# L1 loss
# L = abs(pred - actual)
l1_y_vals = tf.abs(target - x_vals)
l1_y_out = sess.run(l1_y_vals)
#Pseudo-Huber损失函数是Huber损失函数的连续、平滑估计,试图利用L1和L2正则削减极值处的陡峭,使得目标值附近连续。它的表达式以来参数delta。
#L = delta^2 * (sqrt(1 + ((pred - actual)/delta)^2) - 1)
# Pseudo-Huber with delta = 0.25
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)
# Pseudo-Huber with delta = 5
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.grid()
plt.show()
# Various predicted X values
x_vals = tf.linspace(-3., 5., 500)
# Target of 1.0
target = tf.constant(1.)
targets = tf.fill([500,], 1.)
# Hinge损失函数主要用来评估支持向量机算法,但有时也用来评估神经网络算法。
# Use for predicting binary (-1, 1) classes
# L = max(0, 1 - (pred * actual))
hinge_y_vals = tf.maximum(0., 1. - tf.multiply(target, x_vals))
hinge_y_out = sess.run(hinge_y_vals)
# Cross entropy loss
# L = -actual * (log(pred)) - (1-actual)(log(1-pred))
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)
# L = -actual * (log(sigmoid(pred))) - (1-actual)(log(1-sigmoid(pred)))
# or
# L = max(actual, 0) - actual * pred + log(1 + exp(-abs(actual)))
x_val_input = tf.expand_dims(x_vals, 1)
target_input = tf.expand_dims(targets, 1)
xentropy_sigmoid_y_vals = tf.nn.sigmoid_cross_entropy_with_logits(logits=x_val_input, labels=target_input)
xentropy_sigmoid_y_out = sess.run(xentropy_sigmoid_y_vals)
# Weighted cross entropy loss
# L = -actual * (log(pred)) * weights - (1-actual)(log(1-pred))
# or
# L = (1 - pred) * actual + (1 + (weights - 1) * pred) * log(1 + exp(-actual))
weight = tf.constant(0.5)
xentropy_weighted_y_vals = tf.nn.weighted_cross_entropy_with_logits(logits=x_vals, targets=targets, pos_weight=weight)
xentropy_weighted_y_out = sess.run(xentropy_weighted_y_vals)
# Plot the output
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.grid()
plt.show()
相关推荐
在深入理解TensorFlow中的损失函数专题之前,我们首先需要明白损失函数在机器学习模型中的作用。损失函数是评价模型预测值与真实值差异的一种度量,用于衡量模型预测的准确度,它是优化算法的核心,用以计算梯度并...
### TensorFlow自定义损失函数详解 #### 一、引言 在机器学习特别是深度学习领域,损失函数(Loss Function)扮演着至关重要的角色。它衡量了模型预测结果与真实标签之间的差距,是训练过程中优化目标的核心指标。...
例如,对于分类任务,通常使用交叉熵损失函数,而回归任务则可能选择均方误差。同时,准确率(Accuracy)是衡量分类性能的常用指标。 为了训练模型,你需要定义训练步骤,这通常包括前向传播、计算损失、反向传播和...
本篇小记将重点探讨在TensorFlow中如何使用分类损失函数,特别是`sparse_categorical_crossentropy`和`categorical_crossentropy`,以及它们与二分类损失函数`BinaryCrossentropy`之间的差异。 首先,我们来看多...
9. **损失函数(Loss Function)**:例如,均方误差(Mean Squared Error)或交叉熵(Cross Entropy)是常见的损失函数,用于衡量模型预测与真实值之间的差异。 10. **反向传播(Backpropagation)**:TensorFlow自动进行...
在TensorFlow中,自定义损失函数对于解决特定问题至关重要,特别是在优化模型性能时,如本文中预测商品销售量的例子。传统的损失函数,如均方误差(MSE)或交叉熵,可能并不适合所有情况。在这个例子中,商家的损失...
这些天损失函数有点困扰我,现结合tensorflow2.0官方文档,做以下小结,如果有其它想要补充的,后面再随时更新。 1、tf.keras.losses.sparse_categorical_crossentropy / tf.keras.losses....
一个使用 Tensorflow 库在 Python 中实现交叉熵损失函数的示例,在实际中,您需要使用更高级的技巧,如对不平衡类别进行损失权重,并使用不同的参数和技术来调整模型以获得更好的性能。
3. 编译模型:配置损失函数(如均方误差)和优化器(如Adam),以及评估指标。 4. 训练模型:使用训练数据对模型进行迭代训练,调整权重和偏置。 5. 验证与测试:在验证集和测试集上评估模型的性能,防止过拟合。 6....
在机器学习和深度学习中,TensorFlow 是一个...在训练神经网络时,我们经常需要找到损失函数的极小值,这正是梯度下降等优化算法的目标。通过理解这些基本概念,我们可以更好地设计和调试我们的模型,以达到最优性能。
在Keras中可以自定义损失函数,在自定义损失函数的过程中需要注意的一点是,损失函数的参数形式,这一点在Keras中是固定的,须如下形式: def my_loss(y_true, y_pred): # y_true: True labels. TensorFlow/Theano ...
同时,使用TensorBoard等可视化工具可以帮助我们监控训练过程,观察损失函数的变化和参数更新情况。 总结来说,结合数值分析和TensorFlow解决Himmelblau函数优化问题,可以加深对神经网络反向传播原理的理解,尤其...
- **损失函数** - `tf.losses.mean_squared_error`: 均方误差 - `tf.losses.sparse_softmax_cross_entropy`: 稀疏交叉熵 - **分类函数** - `tf.nn.softmax`: Softmax函数 - **循环神经网络** - `tf.nn.rnn`: ...
YOLOV3-损失函数及其源代码理解(yolo_layer.c) 讲得好 https://github.com/AlexeyAB/darknet/issues/821 x,y,w,h 损失 原版的bbox损失为MSE,其后又GIOU,DIOU… delta即为求完损失的梯度 公式对应图 思路及具体...
- `tf.nn.nce_loss`: 负例采样损失函数。 - `tf.nn.sampled_softmax_loss`: 候选采样softmax损失。 #### 保存与恢复变量 - **Checkpointing** - `tf.train.Saver`: 用于保存和恢复变量。 #### 操作组 **1. 数学...
- **模型(Model)**: 可以是顺序模型或功能式模型,用于组织层和定义损失函数、优化器和评估指标。 - **层(Layer)**: 表示模型中的计算单元,如全连接层(Dense)、卷积层(Conv2D)和池化层(MaxPooling2D)。 -...
TensorFlow 是一个强大的开源库,用于构建和执行计算图,广泛应用于机器学习和深度学习...在实践中,还需要掌握更多的高级特性,如优化器、损失函数、数据预处理、模型保存与恢复等,才能构建出复杂的机器学习系统。