sigmoid_cross_entropy_with_logits的计算方法

sigmoid_cross_entropy_with_logits 可以衡量已标注过数据预测的正确度。比如一个(x,y)数据项,x表示输入取值为实数,y表示标注取值0或1。根据x算出一个概率p=1/(1+e^(-x)) 。 可以看到,当x=0时p=0.5 ,标注为1或0的概率各50%;x>0 时,p>0.5, x越大p越接近于0;x < 0 时,p<0.5。所以 L=ylog(p)+ (1-y)log(1-p)可以衡量x和y对sigmoid的符合度,L越大表示越符合,可以看出L的第一项在y=1时贡献一个值,第二项在y=0时贡献一个值。sigmoid_cross_entropy_with_logits = - L ,因而就变成越小越符合。

import tensorflow as tf
import math
import numpy as np

a = [3., 2.0 , 1.0 , -2.0 , -2.0 , 1.0 , 20.0]
y = [1., 1,    1 ,    0  ,   1 ,   0  , 0 ]
na =  np.array( a  )
ta = tf.Variable( a )
pa = [ 1.0/(math.exp(-a1)+1.0) for a1 in a ]
print(pa)

ty = tf.Variable( y )
print('math.log(1-pa[6])' , math.log(1-pa[6]) )
yal =  [ -y1*math.log(pa1)-(1-y1)*math.log(1-pa1) for y1, pa1 in zip(y , pa)   ]
print( 'yal:' , yal )
L = tf.nn.sigmoid_cross_entropy_with_logits( logits= ta , labels = ty )

with tf.Session() as se :
    se.run( tf.global_variables_initializer())
    L0 = se.run( L  )
    print(L0)

 

你可能感兴趣的:(tensorflow,python)