sigmoid softmax优化

1.前言

最近在搞模型部署发现,推理速度不能满足我们需求,于是最近学习了优化算子技巧,学到了sigmoid,softmax算子优化,真的数学之美。

2.sigmoid算子优化

一.算子优化图

sigmoid softmax优化_第1张图片
我们根据sigmoid公式,我们进行求反函数,于是有了上面的等式变化,我们只需要把模型输出的值,直接与阈值比较就可以,比如阈值0.5得分我们可以通过上面等式,换算成模型输出的值,这样模型输出的值,就可以直接比较了,大大减少了运算,少了一层sigmoid。

二.python代码实现

import numpy as np
def sigmoid(x):
    
    return 1 / (1 + np.exp(-x))

def desigmoid(y):
    
    return -np.log(1 / y -1)

if __name__ == "__main__":
    score = sigmoid(0.5)
    descore = desigmoid(score)
    print(score)
    print(descore)
0.6224593312018546
0.5
代码输出结果符号预期

3.sotfmax算子优化

一.算子优化图(注意本次只讨论两个类情况)

sigmoid softmax优化_第2张图片
根据上面的公式推导,发现,把sotfmax,做一些变换后,发现是sigmoid函数,于是我们可以借用上面的sigmoid函数优化思路去优化。注意这里面的(y是正样本输出值,x是负样本输出的值,是网络输出的值)

二.python代码实现

def softmax(x, y):
    n, p = np.exp(x), np.exp(y)
    return n/(n + p), p / (n + p)
x = 120
y = 54
n, p = softmax(x, y)
p
2.1705220113036395e-29

sigmoid(y - x)
2.1705220113036392e-29
符合我们预期

4.总结

简单记录本次优化思路。

你可能感兴趣的:(tensorrt,深度学习)