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)