C++实现softmax函数(std::vector)

参考博客 激活函数之softmax介绍及C++实现及其评论区
Lambda使用参考博客:C++ 11 Lambda表达式

函数功能,输入vector<float>数组,修改原数组为softmax后输出。即实现下面的公式:
softmax ⁡ ( x ) i = exp ⁡ ( x i − x m a x ) ∑ j = 1 n exp ⁡ ( x j − x m a x ) \operatorname{softmax} (\mathrm{x})_{i}=\frac{\exp \left(\mathrm{x}_{i}-\mathrm{x}_{max}\right)}{\sum_{j=1}^{n} \exp \left(\mathrm{x}_{j}-\mathrm{x}_{max}\right)} softmax(x)i=j=1nexp(xjxmax)exp(xixmax)

void softmax(std::vector<float> &input){
    float maxn = 0.0;
    float sum= 0.0;
    maxn = *max_element(input.begin(), input.end());
    std::for_each(input.begin(), input.end(), [maxn,&sum](float& d) {
    	d=exp(d-maxn);sum+=d;}); 	//cmath c11
    std::for_each(input.begin(), input.end(), [sum](float& d) { d=d/sum;});
    return;
}
/*
testInput:	{1.9502,-2.125,2.60156,2.05078,-1.77539,-4.21875}
output: 0.245873 0.00417709 0.471621 0.271889 0.00592526 0.000514719
*/

和Libtorch的softmax方法对比,结果差距在小数点后9位。

btw,vector实现求和的stl方法:

sum = accumulate(input.begin(),input.end(),0);// include<numeric>

Done.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值