原函数:
tf.nn.sparse_softmax_cross_entropy_with_logits(
_sentinel=None,
labels=None,
logits=None,
name=None
)
tf.nn.softmax_cross_entropy_with_logits(
_sentinel=None,
labels=None,
logits=None,
dim=-1,
name=None
)
1.sparse_softmax_cross_entropy_with_logits中 lables接受直接的数字标签
如[1], [2], [3], [4] (类型只能为int32,int64)
labels=tf.constant([0,1,2,3],dtype=tf.int32)
logits=tf.Variable(tf.random_normal([4,4]))
loss=tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels,logits=logits)
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
print(sess.run(loss))
2.而softmax_cross_entropy_with_logits中 labels接受one-hot标签
如[1,0,0,0], [0,1,0,0],[0,0,1,0], [0,0,0,1] (类型为int32, int64)
相当于sparse_softmax_cross_entropy_with_logits 对标签多做一个one-hot动作
labels=tf.constant([[1,0,0,0], [0,1,0,0],[0,0,1,0], [0,0,0,1] ],dtype=tf.int32)
logits=tf.Variable(tf.random_normal([4,4]))
loss=tf.nn.softmax_cross_entropy_with_logits(labels=labels,logits=logits)
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
print(sess.run(loss))
注意!!!上面两个函数的返回值并不是一个数,而是一个向量,如果要求交叉熵,我们要再做一步tf.reduce_sum操作,就是对向量里面所有元素求和,如果求loss,则要做一步tf.reduce_mean操作,对向量求均值!