tf.nn.sigmoid_cross_entropy_with_logits()

在深度学习的编程题里面经常出现的一个函数.下面的文字是大致翻译于tensorflow官网对其的介绍:

函数原型:

tf.nn.sigmoid_cross_entropy_with_logits(_sentinel=None,,labels=None,logits=None,name=None)

对于给定的logits计算sigmoid的交叉熵。

衡量的是分类任务中的概率误差,他也是试用于每一个类别都是相不排斥的(代码中可以看出),例如,有的可以划到多个类别中,给你一张照片,同时包含大象和狗。简单的来说,我们使得x=logits,z=labels,那么误差是:

logits和labels必须有相同的类型和大小。

第一个参数:_sentinel内部的并不使用。

第二个参数:labels和logits的shape和type一样。

第三个参数:logits类型为float32或者float64

第四个参数:操作的名称,可省。

返回的是:一个张量,和logits的大小一致。是逻辑损失

import numpy as np
import tensorflow as tf

def sigmoid(x):
    return 1.0/(1+np.exp(-x))

labels=np.array([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])
logits=np.array([[11.,8.,7.],[10.,14.,3.],[1.,2.,4.]])
y_pred=sigmoid(logits)
prob_error1=-labels*np.log(y_pred)-(1-labels)*np.log(1-y_pred)
print(prob_error1)

print(".............")
labels1=np.array([[0.,1.,0.],[1.,1.,0.],[0.,0.,1.]])#不一定只属于一个类别
logits1=np.array([[1.,8.,7.],[10.,14.,3.],[1.,2.,4.]])
y_pred1=sigmoid(logits1)
prob_error11=-labels1*np.log(y_pred1)-(1-labels1)*np.log(1-y_pred1)
print(prob_error11)

print(".............")
with tf.Session() as sess:
    print(sess.run(tf.nn.sigmoid_cross_entropy_with_logits(labels=labels,logits=logits)))
    print(".............")
    print(sess.run(tf.nn.sigmoid_cross_entropy_with_logits(labels=labels1,logits=logits1)))

结果:你会发现第一个输出与第三个一致,第二个输出和第四个一致

[[1.67015613e-05 8.00033541e+00 7.00091147e+00]
 [1.00000454e+01 8.31528373e-07 3.04858735e+00]
 [1.31326169e+00 2.12692801e+00 1.81499279e-02]]
.............
[[1.31326169e+00 3.35406373e-04 7.00091147e+00]
 [4.53988992e-05 8.31528373e-07 3.04858735e+00]
 [1.31326169e+00 2.12692801e+00 1.81499279e-02]]
.............
2018-08-03 20:54:55.486212: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
[[1.67015613e-05 8.00033541e+00 7.00091147e+00]
 [1.00000454e+01 8.31528373e-07 3.04858735e+00]
 [1.31326169e+00 2.12692801e+00 1.81499279e-02]]
.............
[[1.31326169e+00 3.35406373e-04 7.00091147e+00]
 [4.53988992e-05 8.31528373e-07 3.04858735e+00]
 [1.31326169e+00 2.12692801e+00 1.81499279e-02]]

Process finished with exit code 0

之后再补上其他的计算代价的函数!!!

猜你喜欢

转载自blog.csdn.net/m0_37393514/article/details/81393819