Tensorflow的softmax_cross_entropy_with_logits函数

第一次接触这个函数的时候,直接给整蒙了,好端端的softmax层不放在inference里,怎么给单独抽出来了?下面就根据tensorflow的官方API,聊一聊这个又长又丑的函数。

然后,我干的第一件事情,就是把官方API的文档给copy过来了,方便后面引用

Computes softmax cross entropybetween logits and labels.

Measures the probability error indiscrete classification tasks in which the classes are mutually exclusive (eachentry is in exactly one class). For example, each CIFAR-10 image is labeledwith one and only one label: an image can be a dog or a truck, but not both.

NOTE: While the classes are mutually exclusive, their probabilities need not be. All that is required is that eachrow of labels is a valid probability distribution. If they are not, the computationof the gradient will be incorrect.

If using exclusive labels (whereinone and only one class is true at a time), see sparse_softmax_cross_entropy_with_logits.

WARNING: This op expects unscaled logits, since it performs a softmax on logits internally for efficiency. Do not call this op with the output of softmax, as it will produce incorrect results.

Logits and labels must have the sameshape [batch_size, num_classes] and the same dtype (eitherfloat32 or float64).

Args:

logits: Unscaled log probabilities.

labels: Each row labels[i] must be avalid probability distribution.

name: A name for the operation(optional).

Returns:

A 1-D Tensor of length batch_size of the same type as logits with the softmax crossentropy loss.

然后就是我个人的理解。

首先看输入logits,它的shape是[batch_size, num_classes] ,一般来讲,就是神经网络最后一层的输入z。

另外一个输入是labels,它的shape也是[batch_size, num_classes],就是我们神经网络期望的输出。

这个函数的作用就是计算最后一层是softmax层的cross entropy,只不过tensorflow把softmax计算与cross entropy计算放到一起了,用一个函数来实现,用来提高程序的运行速度,原话就是

it performs a softmax on logits internally for efficiency。

开始看到这个函数的时候,第一反应就是,softmax被拉出来单独计算了,那么原网络inference岂不是不完整了?因为最后一层的softmax输出计算没有在inference里进行啊。后来想想,这个貌似对最后的结果正确性和accuracy计算没什么影响,因为最后一层的计算y = softmax(z)不会影响到输出值的大小顺序,主因是softmax是个单调增函数,也就是说,z的大小排序和y的大小排序是一样的,废话不多说,为了更好理解,我上图!

这图明眼人能看出来,摘自那本读了能让人醍醐灌顶的书——一本好书

这个图里有4个输入,大小顺序3-4-2-1,softmax输出有4个,大小顺序依然是3-4-2-1,只不过被概率化了而已。我们再看一下一般的accuracy计算的方式

correct_pred = tf.equal(tf.argmax(z,1), tf.argmax(y,1))

accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

从计算方式来看,只要输出的大小顺序没有被改变,这个accuracy的计算就不会受到影响啦!

最后,总结一下我的个人理解,也不一定全对。tensorflow之所以把softmax和cross entropy放到一个函数里计算,就是为了提高运算速度,虽然这样做让很多刚接触tf的同志难以捉摸,但Google的工程师是不会以“使用者的舒服程度”为第一要素设计程序的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容