简介
SoftMax 函数在深度学习中十分常见,多见于多分类概率问题,通过softmax可以将预测结果映射到0-1且保证概率之和为1。
假设一个数组中包含n个元素,则对应位置k的softmax计算公式如下:
Keras Api
Tensorflow keras 提供了计算softmax的方法 tf.nn.softmax,可以直接调用:
logits = np.random.random((3, 10))
# softMax 前
print("softMax 前")
print(logits)
# softMax 后
print("softMax 后")
print(tf.nn.softmax(logits))
这里初始化一个 3 x 10 的随机正态分布供后续 softmax 使用,针对每一个 1x10的数组,均使用softmax使其归一化至0-1:
softMax 前
[[0.32601273 0.50874893 0.86576573 0.23793323 0.64227146 0.81647401
0.23725476 0.63700227 0.83840016 0.58136121]
[0.36389123 0.48618679 0.12991884 0.91359954 0.11360679 0.95020336
0.22756855 0.64274918 0.4916034 0.09707857]
[0.24259337 0.94773147 0.40199776 0.44103588 0.958499 0.9913212
0.69810947 0.23595161 0.5441963 0.8563392 ]]
softMax 后
tf.Tensor(
[[0.07647102 0.09180329 0.13119239 0.07002361 0.10491711 0.12488249
0.06997611 0.10436574 0.12765092 0.09871732]
[0.08828954 0.09977496 0.0698709 0.15298349 0.06874041 0.15868702
0.07703802 0.11668519 0.10031687 0.06761359]
[0.06516136 0.13189482 0.07642204 0.07946441 0.13332268 0.13777123
0.10275863 0.06473001 0.08809975 0.12037508]], shape=(3, 10), dtype=float64)
自定义SoftMax
逻辑比较简单,也可以自己python实现以下:
import numpy as np
import math
import tensorflow as tf
def softMax(logit):
sum = np.sum(list(map(lambda x: math.exp(x),logit)))
softmax = map(lambda x: math.exp(x)/sum,logit)
return softmax
print("自定义 softMax")
for i in range(3):
print(list(softMax(logits[i])))
和官方api比较结果一致。
自定义 softMax
[0.07647102457817605, 0.09180328732235228, 0.13119239456227919, 0.07002360566019898, 0.10491711309359766, 0.12488248717439109, 0.06997611280605749, 0.10436573838405831, 0.12765091837432244, 0.09871731804456656]
[0.08828954472705547, 0.09977496094441436, 0.06987090386072572, 0.15298348952321952, 0.0687404115051318, 0.1586870187693407, 0.07703801627957403, 0.11668519317309592, 0.1003168686968852, 0.0676135925205574]
[0.06516136377479805, 0.13189482273410055, 0.07642203696666926, 0.07946440748002125, 0.1333226771585656, 0.13777122716465545, 0.10275862716404895, 0.06473001158655198, 0.08809974512159192, 0.12037508084899705]
更多推荐算法相关深度学习:深度学习导读专栏