美文网首页
Tensorflow四种交叉熵函数计算公式

Tensorflow四种交叉熵函数计算公式

作者: 求索_700e | 来源:发表于2019-05-11 23:37 被阅读0次

    转自:https://blog.csdn.net/QW_sunny/article/details/72885403

                Tensorflow交叉熵函数:cross_entropy

    注意:tensorflow交叉熵计算函数输入中的logits都不是softmax或sigmoid的输出,而是softmax或sigmoid函数的输入,因为它在函数内部进行sigmoid或softmax操作

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

    参数:    _sentinel:本质上是不用的参数,不用填

               logits:一个数据类型(type)是float32或float64;

               shape:[batch_size,num_classes],单样本是[num_classes]

               labels:和logits具有相同的type(float)和shape的张量(tensor),

               name:操作的名字,可填可不填

    输出:

               loss,shape:[batch_size,num_classes]

    Note: 它对于输入的logits先通过sigmoid函数计算,再计算它们的交叉熵,但是它对交叉熵的计算方式进行了优化,使得结果不至于溢出。它适用于每个类别相互独立但互不排斥的情况:例如一幅图可以同时包含一条狗和一只大象。output不是一个数,而是一个batch中每个样本的loss,所以一般配合tf.reduce_mea(loss)使用

    计算公式:

    Python 程序:

    import tensorflow as tf

    import numpy as np

    def softmax(x):

        sum_raw = np.sum(np.exp(x),axis=-1)

        x1 = np.ones(np.shape(x))

        for i in  range(np.shape(x)[0]):

            x1[i] = np.exp(x[i])/sum_raw[i]

        return x1

    y = np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0]])#每一行只有一个1

    logits =np.array([[12,3,2],[3,10,1],[1,2,5],[4,6.5,1.2],[3,6,1]])

    y_pred =softmax(logits)

    E1 = -np.sum(y*np.log(y_pred),-1)

    print(E1)

    sess = tf.Session()

    y = np.array(y).astype(np.float64)

    E2 = sess.run(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=logits))

    print(E2)

    输出的E1,E2结果相同


    tf.nn.softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None)argument:

    _sentinel: 本质上是不用的参数,不用填

    logits:一个数据类型(type)是float32或float64;

    shape :[batch_size,num_classes]

    labels:和logits具有相同type和shape的张量(tensor),,是一个有效的概率,sum(labels)=1, one_hot=True(向量中只有一个值为1.0,其他值为0.0)

    name:操作的名字,可填可不填

    output: loss,shape:[batch_size]

    Note: 它对于输入的logits先通过softmax(不同于sigmoid)函数计算,再计算它们的交叉熵,但是它对交叉熵的计算方式进行了优化,使得结果不至于溢出。它适用于每个类别相互独立且排斥的情况,一幅图只能属于一类,而不能同时包含一条狗和一只大象。output不是一个数,而是一个batch中每个样本的loss,所以一般配合tf.reduce_mean(loss)使用。

    计算公式:

    Python程序:

    import tensorflow as tf

    import numpy as np

    def softmax(x):

        sum_raw = np.sum(np.exp(x),axis=-1)

        x1 = np.ones(np.shape(x))

        for i in range(np.shape(x)[0]):

            x1[i] = np.exp(x[i])/sum_raw[i]

        return x1

    y = np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0]])#每一行只有一个1

    logits =np.array([[12,3,2],[3,10,1],[1,2,5],[4,6.5,1.2],[3,6,1]])

    y_pred =softmax(logits)

    E1 = -np.sum(y*np.log(y_pred),-1)

    print(E1)

    sess = tf.Session()

    y = np.array(y).astype(np.float64)

    E2 = sess.run(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=logits))

    print(E2)

    输出的E1,E2结果相同


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

    argument:

    _sentinel:本质上是不用的参数,不用填

    logits:一个数据类型(type)是float32或float64;

    shape:[batch_size,num_classes]

    labels: shape为[batch_size],labels[i]是{0,1,2,……,num_classes-1}的一个索引, type为int32或int64

    name:操作的名字,可填可不填

    output:

    loss,shape:[batch_size]

    Note:它对于输入的logits先通过softmax函数计算,再计算它们的交叉熵,但是它对交叉熵的计算方式进行了优化,使得结果不至于溢出

    它适用于每个类别相互独立且排斥的情况,一幅图只能属于一类,而不能同时包含一条狗和一只大象

    output不是一个数,而是一个batch中每个样本的loss,所以一般配合tf.reduce_mean(loss)使用

    计算公式:

    和tf.nn.softmax_cross_entropy_with_logits()一样,只是要将labels转换成tf.nn.softmax_cross_entropy_with_logits()中labels的形式

    tf.nn.weighted_cross_entropy_with_logits(labels,logits, pos_weight, name=None)

    计算具有权重的sigmoid交叉熵sigmoid_cross_entropy_with_logits()

    argument:

    _sentinel:本质上是不用的参数,不用填

    logits:一个数据类型(type)是float32或float64;

    shape:[batch_size,num_classes],单样本是[num_classes]

    labels:和logits具有相同的type(float)和shape的张量(tensor),

    pos_weight:正样本的一个系数

    name:操作的名字,可填可不填

    output:

    loss,shape:[batch_size,num_classes]

    计算公式:

    相关文章

      网友评论

          本文标题:Tensorflow四种交叉熵函数计算公式

          本文链接:https://www.haomeiwen.com/subject/lafqaqtx.html