深度学习 - 6.TF x Keras SoftMax 自定义实现

简介

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]

更多推荐算法相关深度学习:深度学习导读专栏 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIT_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值