# coding=utf-8
'''
Created on 2019年4月5日
@author: admin
'''
import tensorflow as tf
# tf.nn.sigmoid_cross_entropy_with_logits(_sentinel, labels, logits, name)
# tf.nn.softmax(logits, axis, name, dim)
# tf.nn.log_softmax(logits, axis, name, dim)
# tf.nn.softmax_cross_entropy_with_logits(_sentinel, labels, logits, dim, name)
# tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel, labels, logits, name)
# tf.nn.softmax_cross_entropy_with_logits_v2(_sentinel, labels, logits, dim, name)
# tf.nn.softmax_cross_entropy_with_logits(v1)和tf.nn.softmax_cross_entropy_with_logits_v2(v2)区别在于前者在进行反向传播的时候,只对logits进行反向传播,labels保持不变。而v2在进行反向传播的时候,同时对logits和labels都进行反向传播,如果将labels传入的tensor设置为stop_gradients,就和v1一样了。
# 那么问题来了,一般我们在进行监督学习的时候,labels都是标记好的真值,什么时候会需要改变label?v2存在的意义是什么?实际上在应用中labels并不一定都是人工手动标注的,有的时候还可能是神经网络生成的,一个实际的例子就是对抗生成网络(GAN)。
# 参考自https://blog.csdn.net/tsyccnh/article/details/81069308
# # logits是神经网络的最后一层输出
# logits:[batch_size,num_classes] lables:[batch_size,num_classes]或者[batch_size]
# loss:[batch_size]
# # tf.nn.softmax
# a = tf.constant([[50.0,100.0],[0.2,4.0]])
# b = tf.constant([[0.0,1.0],[0.0,1.0]])
# c = tf.nn.softmax(logits=a)
# cost = tf.reduce_mean(-tf.reduce_sum(b * tf.log(c), axis=1))
# sess = tf.Session()
# print(sess.run(cost))
# # 0.011062144
# #tf.nn.softmax_cross_entropy_with_logits(_sentinel, labels, logits, dim, name)
# a = tf.constant([[0.0,99.0],[0.2,4.0]])
# b = tf.constant([[0,1],[0,1]])#需要ONE-HOT形式
# cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=a, labels=b))
# sess = tf.Session()
# print(sess.run(cost))
# 0.011062129
# #tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel, labels, logits, name)
# a = tf.constant([[0.0,99.0],[0.2,4.0]])
# b = tf.constant([1,1])#不需要ONE-HOT形式
# cost = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=a, labels=b))
# sess = tf.Session()
# print(sess.run(cost))
# 0.011062129
#tf.nn.sigmoid_cross_entropy_with_logits(_sentinel, labels, logits, name)
a = tf.constant([[9999.9],[-54.0]])
b = tf.constant([[1.0],[1.0]])#2分法
cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=a, labels=b))
sess = tf.Session()
print(sess.run(cost))
# 27.0
Tensotflow1.0入门(九)-tensorflow分类函数
最新推荐文章于 2019-10-23 16:46:32 发布