关于tensorflow 中cross entropy 的 numpy实现
import tensorflow as tfimport numpy as npimport osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'# Make up some testing data, need to be rank 2x = np.array([ [0.,2.,1.], [0.,0.,2.] ])label = np.array([ [0.,1.,0.], [0.,0.,1.] ])label2 = np.array([1,2])# Numpy part #def sigmoid(logits): return (1/(1+np.exp(-logits)))def softmax(logits): sf = np.exp(logits) sf = sf/np.sum(sf, axis=1).reshape(-1,1) return sfdef cross_entropy2(softmax, labels): return -(labels * np.log(softmax) + (1- labels) * ( np.log(1- softmax)))def cross_entropy(softmax, labels): return -np.sum(labels * np.log(softmax),axis=1)numpy_sig = cross_entropy2( sigmoid(x), label )numpy_softmax = cross_entropy( softmax(x), label )print(softmax(x))print("my sigmoid_cross_entropy_with_logits is \n %s \n "%(numpy_sig))print("my softmax_cross_entropy_with_logits is \n %s \n "%(numpy_softmax))# Tensorflow part #g = tf.Graph()with g.as_default(): tf_x = tf.constant(x) tf_label = tf.constant(label) tf_label2 = tf.constant(label2) tf_ret = tf.nn.sigmoid_cross_entropy_with_logits(logits= tf_x,labels=tf_label) tf_softmax = tf.nn.softmax_cross_entropy_with_logits(logits= tf_x,labels=tf_label) tf_softmax_2 = tf.nn.sparse_softmax_cross_entropy_with_logits(logits= tf_x,labels=tf_label2)with tf.Session(graph=g) as ss: r_sig,r_softmax,r_softmax_sparse = ss.run([tf_ret,tf_softmax,tf_softmax_2])print("tensorflow sigmoid_cross_entropy_with_logits is \n %s \n "%(r_sig))print("tensorflow softmax_cross_entropy_with_logits is \n %s \n "%(r_softmax))print("tensorflow sparse_softmax_cross_entropy_with_logits is \n %s \n "%(r_softmax_sparse))