C++怎么实现softmax函数
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,本篇内容主要讲解"C++怎么实现softmax函数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么实现softmax函数"吧!背景今天面试字节算法
千家信息网最后更新 2025年02月23日C++怎么实现softmax函数
本篇内容主要讲解"C++怎么实现softmax函数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么实现softmax函数"吧!
背景
今天面试字节算法岗时被问到的问题,让我用C++实现一个softmax函数。softmax是逻辑回归在多分类问题上的推广。大概的公式如下:
即判断该变量在总体变量中的占比。
第一次实现
实现
我们用vector来封装输入和输出,简单的按公式复现。
vectorsoftmax(vector input){ double total=0; for(auto x:input) { total+=exp(x); } vector result; for(auto x:input) { result.push_back(exp(x)/total); } return result;}
测试
test 1
测试用例1: {1, 2, 3, 4, 5}
测试输出1: {0.0116562, 0.0316849, 0.0861285, 0.234122, 0.636409}
经过简单测试是正常的。
test 2
但是这时面试官提出了一个问题,即如果有较大输入变量时会怎么样?
测试用例2: {1, 2, 3, 4, 5, 1000}
测试输出2: {0, 0, 0, 0, 0, nan}
由于 e^1000已经溢出了双精度浮点(double)所能表示的范围,所以变成了NaN(not a number)。
第二次实现(改进)
改进原理
我们注意观察softmax的公式:
如果我们给上下同时乘以一个很小的数,最后答案的值是不变的。
那我们可以给每一个输入 x i 都减去一个值 a ,防止爆精度。
大致表示如下:
实现
vectorsoftmax(vector input){ double total=0; double MAX=input[0]; for(auto x:input) { MAX=max(x,MAX); } for(auto x:input) { total+=exp(x-MAX); } vector result; for(auto x:input) { result.push_back(exp(x-MAX)/total); } return result;}
测试
test 1
测试用例1: {1, 2, 3, 4, 5, 1000}
测试输出1: {0, 0, 0, 0, 0, 1}
test 2
测试用例1: {0, 19260817, 19260817}
测试输出1: {0, 0.5, 0.5}
我们发现结果正常了。
完整代码
#include#include #include using namespace std;vector softmax(vector input){ double total=0; double MAX=input[0]; for(auto x:input) { MAX=max(x,MAX); } for(auto x:input) { total+=exp(x-MAX); } vector result; for(auto x:input) { result.push_back(exp(x-MAX)/total); } return result;}int main(int argc, char *argv[]){ int n; cin>>n; vector input; while(n--) { double x; cin>>x; input.push_back(x); } for(auto y:softmax(input)) { cout< 到此,相信大家对"C++怎么实现softmax函数"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
测试
输出
函数
C++
公式
变量
问题
输入
内容
精度
学习
实用
更深
较大
上下
代码
兴趣
原理
同时
字节
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
更改服务器本地安全策略
司法局送法进学校网络安全
数据库在电脑上如何设置
酒店数据库简介
学校国家网络安全宣传活动报告
一年一度的网络安全攻防演习
智慧停车管理系统数据库密码
代号探戈第五关证物数据库
网络安全法对哪些行为处罚
服务器端的ip地址
qq邮箱收发邮件的服务器端口
linux读取数据库文件
制作图书数据库
中华人民共和国网络安全规定
jsp数据库满了
网络安全概述课后题答案
怎么找靠谱的软件开发公司
数据库中如何查询密码
支付宝微信服务器在那国
java数据库查分页
vs服务器资源管理器创建数据库
厦门网络技术服务质量
什么是产品网络安全
网络安全产品按功能分类
北京蓝果网络技术怎么样
电脑软件无法连接手机服务器
纪录片下载软件开发
nsa新建网络安全局
网络安全风险隐患登记表
自己搭建的服务器怎么连接域名