zoukankan      html  css  js  c++  java
  • Tensorflow四种交叉熵函数计算公式:tf.nn.cross_entropy

    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)

     

    argument:    

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

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

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

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

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

    output:

    loss,shape:[batch_size,num_classes]

    Note:

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

    它适用于每个类别相互独立但互不排斥的情况:例如一幅图可以同时包含一条狗和一只大象

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

    计算公式:

     

    Python 程序:

    importtensorflowas tf
    import numpy asnp

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

    # 5个样本三分类问题,且一个样本可以同时拥有多类
    y = np.array([[1,0,0],[0,1,0],[0,0,1],[1,1,0],[0,1,0]] 

    logits = np.array([[12,3,2],[3,10,1],[1,2,5],[4,6.5,1.2],[3,6,1]])
    y_pred = sigmoid(logits)
    E1 = -y*np.log(y_pred)-(1-y)*np.log(1-y_pred)
    print(E1) # 按计算公式计算的结果
    sess =tf.Session()
    y = np.array(y).astype(np.float64) # labels是float64的数据类型
    E2 = sess.run(tf.nn.sigmoid_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函数计算,再计算它们的交叉熵,但是它对交叉熵的计算方式进行了优化,使得结果不至于溢出

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

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

     

    计算公式:

     

    Python程序:

    importtensorflowas tf
    import numpy asnp

     

    def softmax(x):
        sum_raw = np.sum(np.exp(x),axis=-1)
        x1 = np.ones(np.shape(x))
        for i inrange(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]

  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/pzf9266/p/8994692.html
Copyright © 2011-2022 走看看