tensorflow 中 Cross Entropy算法理解
关于tensorflow 中cross entropy 的 numpy实现
import tensorflow as tf import numpy as np import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # Make up some testing data, need to be rank 2 x = 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 sf def 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))