tensorflow常用优化器与损失函数

优化器

  • tf.train.GradientDescentOptimizer 实现梯度下降算法的优化器。
  • tf.train.AdadeltaOptimizer 实现Adadelta算法的优化器。
  • tf.train.AdagradOptimizer 实现Adagrad算法的优化器。
  • tf.train.AdagradDAOptimizer 实现稀疏线性模型的Adagrad对偶平均算法优化器。
  • tf.train.MomentumOptimizer 实现动量算法的优化器。
  • tf.train.AdamOptimizer 实现Adam算法的优化器。
  • tf.train.FtrlOptimizer 实现FTRL算法的优化优化器。
  • tf.train.ProximalGradientDescentOptimizer 实现近端梯度下降算法的优化器。
  • tf.train.ProximalAdagradOptimizer 实现近端Adagrad算法的优化程序。
  • tf.train.RMSPropOptimizer 实现RMSProp算法的优化程序。

损失函数

absolute_difference(…):在训练过程中添加绝对差值loss.
add_loss(…):为损失集合添加外部定义的loss.
compute_weighted_loss(…):计算加权loss.
cosine_distance(…):在训练过程中添加余弦距离loss.(不赞成的参数)
get_losses(…):获取loss_collection的loss列表.
regularization_loss(…):获取总正规化loss.
get_regularization_losses(…):获取正则化loss列表.
get_total_loss(…):返回其值表示总loss的张量.
hinge_loss(…):在训练过程中添加hinge loss.
huber_loss(…):在训练过程中添加Huber Loss.
log_loss(…):向训练过程中添加Log Loss.
mean_pairwise_squared_error(…):在训练过程中添加成对误差平方loss(pairwise-errors-squared loss).
mean_squared_error(…):在训练过程中添加平方和loss(Sum-of-Squares loss).
sigmoid_cross_entropy(…):使用tf.nn.sigmoid_cross_entropy_with_logits创建交叉熵loss.
softmax_cross_entropy(…):使用tf.nn.softmax_cross_entropy_with_logits创建交叉熵loss.
sparse_softmax_cross_entropy(…):使用tf.nn.sparse_softmax_cross_entropy_with_logits创建交叉熵loss.

tf.losses.absolute_difference函数

tf.losses.absolute_difference(
    labels,
    predictions,
    weights=1.0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

定义在:tensorflow/python/ops/losses/losses_impl.py.

在训练过程中添加绝对差值loss.
weights作为loss的系数.如果提供了标量,那么损失只是按给定值进行缩放.如果weights是形状为[batch_size]的Tensor,则批次中每个样品的总loss由weights向量中的相应元素重新调整.如果weights的形状与predictions的形状匹配,则每个predictions的预测元素的loss由相应的weights值缩放.

参数:

  • labels:真实的输出张量,与“predictions”具有相同的维度.
  • predictions:预测的产出.
  • weights:可选的Tensor,其秩为0或与labels具有相同的秩,并且必须可广播到labels(即,所有维度必须为1,或者与相应的losses维度相同).
  • scope:计算loss时执行的操作范围. loss_collection:将添加此loss的集合.
  • reduction:适用于loss的减少类型.

返回:
该函数返回加权loss浮动Tensor.如果reduction是NONE,则它的形状与labels相同;否则,它是标量.
可能引发的异常:

  • ValueError:如果predictions的形状与labels不匹配,或者weights的形状是无效的,或者labels、predictions是None.

tf.losses.add_loss函数

tf.losses.add_loss(
    loss,
    loss_collection=tf.GraphKeys.LOSSES
)

定义在:tensorflow/python/ops/losses/util.py.
将外部定义的loss添加到losses的集合中.

参数:

  • loss:一个表示loss的Tensor.
  • loss_collection:一个可选的集合以添加loss.

tf.losses.compute_weighted_loss函数

tf.losses.compute_weighted_loss(
    losses,
    weights=1.0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

定义在:tensorflow/python/ops/losses/losses_impl.py.
计算加权loss.

参数:

  • losses:形状为[batch_size, d1, … dN]的Tensor.
  • weights:可选的,其秩为0或与losses具有相同等级的Tensor,并且必须可广播到losses(即,所有维度必须为1或者与相应的losses维度相同).
  • scope:计算loss时执行的操作范围.
  • loss_collection:loss将被添加到这些集合中.
  • reduction:适用于loss的减少类型.

返回:
与losses相同类型的加权损失Tensor,如果reduction是NONE,它的形状与losses相同;否则,它是标量.

可能引发的异常:

  • ValueError:如果weights是None,或者与losses的形状不兼容,或者是否存在losses或weights缺少维度(秩)的数量.

tf.losses.get_regularization_loss函数

tf.losses.get_regularization_loss(
    scope=None,
    name='total_regularization_loss'
)

定义在:tensorflow / python / ops / losses / util.py。
作用;获得总正则化损失。
参数:

scope:用于过滤要返回的损耗的任选范围名称。
name:返回张量的名称。

返回:
标量正则化损失。

tf.losses.sigmoid_cross_entropy函数

tf.losses.sigmoid_cross_entropy(
    multi_class_labels,
    logits,
    weights=1.0,
    label_smoothing=0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

定义在:tensorflow / python / ops / losses / losses_impl.py。
作用:
使用tf.nn.sigmoid_cross_entropy_with_logits创建交叉熵。
weights作为损耗的系数。如果提供了标量,那么损耗只是按给定值进行缩放。如果weights是形状为[batch_size]的张量,则损耗权重适用于每个相应的样本。

如果label_smoothing非零,则将标签平滑为1/2:

tf.losses.softmax_cross_entropy函数

tf.losses.softmax_cross_entropy(
    onehot_labels,
    logits,
    weights=1.0,
    label_smoothing=0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

定义在:tensorflow / python / ops / losses / losses_impl.py。

使用tf.nn.softmax_cross_entropy_with_logits创建交叉熵(交叉熵)损失。

weights作为损耗的系数。如果提供了标量,那么损耗只是按给定值缩放。如果weights是形状为[batch_size]的张量,则损耗权重适用于每个相应的样本。

如果label_smoothing非零,则将标签平滑为:1 / num_classes:new_onehot_labels = onehot_labels *(1-label_smoothing)+ label_smoothing / num_classes

参数:

onehot_labels:[batch_size,num_classes]个目标是一个热编码标签。
logits:[batch_size,num_classes]个logits网络的输出。
重量:任选的张量,其等级为0或1,并且可以广播到形状为[batch_size]的张量的损耗。
label_smoothing:如果大于0,则平滑标签。
scope:计算损失时执行的操作范围。
loss_collection:将添加损失的集合。
减少:适用于损失的减少类型。
返回:

如果减少是NONE,这有形状[batch_size];否则,它是标量。

可能引发的异常:

ValueError:如果logits的形状与onehot_labels不匹配,或weights的形状无效,或者如果weights是None,如果onehot_labels或logits是None。

未完待续…

发布了8 篇原创文章 · 获赞 4 · 访问量 239

猜你喜欢

转载自blog.csdn.net/weixin_44569216/article/details/105587293