700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 损失能收敛到0么 深度学习_人工智能-Tensorflow进行深度学习的一些损失函数的可视化...

损失能收敛到0么 深度学习_人工智能-Tensorflow进行深度学习的一些损失函数的可视化...

时间:2020-05-08 00:30:34

相关推荐

损失能收敛到0么 深度学习_人工智能-Tensorflow进行深度学习的一些损失函数的可视化...

TensorFlow目前是数值计算的最佳开源库,它使机器学习更快更容易。在这篇文章中,您将学习机器学习中使用的一些损失函数。损失函数在机器学习领域非常重要。它们用作测量模型预测输出Y_out与ground truth标签Y之间的距离或差异的方法,以有效地训练我们的模型。

下面是一些重要的Loss函数,它们都是使用Tensorflow库实现的。

为了了解不同的损失函数如何执行,我们将使用Matplotlib(python绘图库)对它们进行可视化。# Import libraries

import matplotlib.pyplot as plt

import tensorflow as tf

#Start a tensorflow session

sess = tf.Session()

# Create our sample data from a line space

Y_pred = tf.linspace(-1., 1., 500)

#Create our target as a zero constant tensor

Y_truth = tf.constant(0.)

注意:我们创建自己的样本数据,仅用于可视化。在实践中,您使用了真实世界的数据和标签。

回归算法的损失函数

回归算法只是将连续数预测为输出的算法。即输出没有有限的范围。L2范数损失/欧几里德损失函数

这就是预测值与真实值之间的差/距离的平方。L2范数损失是好的,因为它似乎收敛于目标。实现这一点可以使算法在接近目标时更慢地收敛,避免超过最小值。

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

L2 loss function#Calculating the L2 loss

val = tf.square(Y_truth - Y_pred)

L2_val = sess.run(val)

#ploting the predicted values against the L2 loss

Y_array = sess.run(Y_pred)

plt.plot(Y_array, L2_val, "b-", label="L2 loss")

plt.title("L2 loss")

plt.xlabel("$Y_{pred}$", fontsize=15)

plt.ylabel("$Y_{true}$", fontsize=15)

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

预测输出Y_pred与ground truth Y的关系图

注意:Tensorflow具有L2损失的内置韩式 tf.nn.l2_loss()。但Tensorflow的L2函数将结果除以2L1范数损失/绝对损失函数

L1的损失和L2的损失是一样的但是我们不是取距离的平方,而是取绝对值。L1的损失在检测离群值时比L2范数更好,因为对于非常大的值来说它不是很陡。需要注意的主要一点是,当接近目标/最小值时,L1损失不是平滑的,这可能导致算法不收敛。#Computing L1 loss with the same values

temp = tf.abs(Y_truth - Y_pred)

L1_val = sess.run(temp)

#ploting the predicted values against the L2 loss

Y_array = sess.run(Y_pred)

plt.plot(Y_array, L1_val, "r-" )

plt.title("L1 loss")

plt.xlabel("$Y_{pred}$", fontsize=15)

plt.ylabel("$Y_{true}$", fontsize=15)

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

Plot of L1 lossPseudo-Huber损失

Pseudo-Huber损失是Huber损失函数的一种变体,它通过靠近目标凸起而对于极值而言不那么陡峭,从而获得L1和L2损失的最佳特性。这种损失取决于额外的参数deltaδ,它决定了函数的陡峭程度。

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

Pseudo Huber loss

其中a =(Y - Y _pred)#Plot of the Pseudo-Huber loss

delta = tf.constant(0.24)

temp_ph = tf.multiply(tf.square(delta),tf.sqrt(1. + tf.square((Y_truth - Y_pred) / delta)) - 1. )

pseudo_h_vals = sess.run(temp_ph)

#ploting the predicted values against the L2 loss

Y_array = sess.run(Y_pred)

plt.plot(Y_array, pseudo_h_vals, "g-" )

plt.title("Pseudo Huber loss")

plt.xlabel("$Y_{pred}$", fontsize=15)

plt.ylabel("$Y_{true}$", fontsize=15)

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

Pseudo Huber plot

分类损失函数

这些损失用于评估分类值之间的距离。交叉熵损失

交叉熵损失有时被称为逻辑损失函数。当我们预测两个0和1类时,使用二元分类的交叉熵损失。这里我们希望测量从实际类(0或1)到预测值的距离,该预测值通常是0到1之间的实数。

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

cross entriopy loss#Redefining our data

Y_pred = tf.linspace(-4., 6., 500)

Y_label = tf.constant(1.)

Y_labels = tf.fill([500,], 1.)

#applying sigmoid

x_entropy_vals = - tf.multiply(Y_label, tf.log(Y_pred)) - tf.multiply((1. - Y_label), tf.log(1. - Y_pred))

x_entropy_loss = sess.run(x_entropy_vals)

#ploting the predicted values against the cross entropy loss

Y_array = sess.run(Y_pred)

plt.plot(Y_array, x_entropy_loss, "r-" )

plt.title("Cross entropy loss")

plt.xlabel("$Y_{pred}$", fontsize=15)

plt.ylabel("$Y_{label}$", fontsize=15)

plt.ylim(-2, 5)

plt.show()

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

Cross entropy lossSigmoid交叉熵损失

这与交叉熵损失函数非常相似,除了我们在应用交叉熵损失之前通过sigmoid函数转换x值。

我们将使用下面的tensorflow函数,其中 Logits 是我们想要应用 sigmoid函数 的张量。这通常是我们模型的预测值,而标签是ground truth值。

tf.nn.sigmoid_cross_entropy_with_logits(

_sentinel=None,

labels=None,

logits=None,

name=None

)x_entropy_sigmoid_vals = tf.nn.sigmoid_cross_entropy_with_logits(labels= Y_labels, logits=Y_pred)

x_entropy_sigmoid_out = sess.run(x_entropy_sigmoid_vals)

#ploting the predicted values against the Sigmoid cross entropy loss

Y_array = sess.run(Y_pred)

plt.plot(Y_array, x_entropy_sigmoid_out, "y-" )

plt.title("Sigmoid cross entropy loss")

plt.xlabel("$Y_{pred}$", fontsize=15)

plt.ylabel("$Y_{label}$", fontsize=15)

plt.ylim(-2, 5)

plt.show()

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

加权交叉熵损失

这是S形交叉熵损失的加权版本。在这里,我们提供积极目标的权重。即,我们指定的重量越高,正值的峰值越高。这可用于控制异常值以进行正面预测。

我们再次使用内置的Tensorflow函数来可视化

tf.nn.weighted_cross_entropy_with_logits(

targets,

logits,

pos_weight,

name = None

)

我们将对两个不同权重的图进行可视化,以向您展示权重如何控制峰值为正值。#comparing two weights

weight = tf.constant(1.)

x_entropy_weighted_vals = tf.nn.weighted_cross_entropy_with_logits(targets=Y_labels, logits=Y_pred, pos_weight=weight)

x_entropy_weighted_out = sess.run(x_entropy_weighted_vals)

weight2 = tf.constant(0.5)

x_entropy_weighted_val_2 = tf.nn.weighted_cross_entropy_with_logits(targets=Y_labels, logits=Y_pred, pos_weight=weight2)

x_entropy_weighted_out_2 = sess.run(x_entropy_weighted_val_2)

#ploting the predicted values against the Sigmoid cross entropy loss

Y_array = sess.run(Y_pred)

plt.plot(Y_array, x_entropy_weighted_out, "b-", label=" weight = 1.0" )

plt.plot(Y_array, x_entropy_weighted_out_2, "r--", label="weight = 0.5" )

plt.title("Weighted cross entropy loss")

plt.legend(loc=4)

plt.xlabel("$Y_{pred}$", fontsize=15)

plt.ylabel("$Y_{label}$", fontsize=15)

plt.ylim(-2, 5)

plt.show()

深度学习的一些损失函数的可视化" inline="0" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; border-style: none; max-width: 100%; display: block; margin: 10px auto;"/>

Softmax交叉熵损失

当只有一个目标类别而不是多个目标类别时,此损失用于衡量损失。因此,该函数首先使用softmax函数将输出转换为概率分布,所有概率分布总和为1,然后根据真实概率分布计算损失函数。y_pred_dist = tf.constant([[1., -3., 10.]])

target_dist = tf.constant([[0.1, 0.02, 0.88]])

softmax_xentropy = tf.nn.softmax_cross_entropy_with_logits(labels=target_dist, logits=y_pred_dist)

print(sess.run(softmax_xentropy))

Output: [1.1601256]稀疏softmax交叉熵

这一损失与前一项相同,除了目标是概率分布,它是哪个类别为真的索引。我们只传递哪个类别为真值的索引,而不是一个值为1的稀疏全零目标向量,如下所示:y_pred = tf.constant([[1., -3., 10.]])

sparse_target_dist = tf.constant([2]) #true value is in the second position of the sparse tensor

sparse_x_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels= sparse_target_dist, logits=y_pred)

print(sess.run(sparse_x_entropy))

Output: [0.00012564]

请记住,这些并不是机器学习中使用的所有损失函数。我只是想为你展示一些常见的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。