TensorFlow_8损失函数

版权声明:本文为业余狙击手原创文章,欢迎阅读,欢迎转载,转载请注明出处,谢谢。 https://blog.csdn.net/sxlsxl119/article/details/85038268

TensorFlow学习系列:

TensorFlow_1参数初始化方法

TensorFlow_2学习率

TensorFlow_3激活函数

TensorFlow_4正则化

TensorFlow_5dropout

TensorFlow_6断点续训与Tensorboard可视化

TensorFlow_7优化器

TensorFlow_8损失函数

     损失函数(loss):用来表示预测(y)已知答案(y_)差距。在训练神经网络时,通过不断改变神经网络中所有参数,使损失函数不断减小,从而训练出更高准确率的神经网络模型,常用的损失函数有均方误差,自定义和交叉熵等。

TensorFlow内置的损失函数一共有四个:

 Tensor=tf.nn.softmax_cross_entropy_with_logits(logits= Network.out, labels= Labels_onehot)

      上面是softmax交叉熵loss,参数为网络最后一层的输出和onehot形式的标签。切记输入一定不要经过softmax,因为在函数中内置了softmax操作,如果再做就是重复使用了。在计算loss的时候,输出Tensor要加上tf.reduce_mean(Tensor)或者tf.reduce_sum(Tensor),作为tensorflow优化器(optimizer)的输入。

Tensor=tf.nn.sparse_softmax_cross_entropy_with_logits (logits=Network.out, labels= Labels)

       这个函数和上面的区别就是labels参数应该是没有经过onehot的标签,其余的都是一样的。另外加了sparse的loss还有一个特性就是标签可以出现-1,如果标签是-1代表这个数据不再进行梯度回传。

Tensor=tf.nn. sigmoid_cross_entropy_with_logits (logits= Network.out, labels= Labels_onehot)

       sigmoid交叉熵loss,与softmax不同的是,该函数首先进行sigmoid操作之后计算交叉熵的损失函数,其余的特性与tf.nn.softmax_cross_entropy_with_logits一致。

Tensor=tf.nn.weighted_cross_entropy_with_logits (logits=Network.out, labels=Labels_onehot, pos_weight=decimal_number)

       这个loss与众不同的地方就是加入了一个权重的系数,其余的地方与tf.nn. sigmoid_cross_entropy_with_logits这个损失函数是一致的,加入的pos_weight函数可以适当的增大或者缩小正样本的loss,可以一定程度上解决正负样本数量差距过大的问题。对比下面两个公式我们可以更加清晰的看到,他和sigmoid的损失函数的区别,

对于普通的sigmoid来说计算的形式如下:

targets * -log(sigmoid(logits)) + (1 - targets) * -log(1 - sigmoid(logits))

加入了pos_weight之后的计算形式如下:

targets * -log(sigmoid(logits)) * pos_weight + (1 - targets) * -log(1 - sigmoid(logits))

TensorFlow后面几个整理的比较仓促,以后有时间再加以完善。

欢迎扫码关注我的微信公众号

猜你喜欢

转载自blog.csdn.net/sxlsxl119/article/details/85038268