目录
背景
今天面试字节算法岗时被问到的问题,让我用C++实现一个softmax函数。softmax是逻辑回归在多分类问题上的推广。大概的公式如下:
即判断该变量在总体变量中的占比。
第一次实现
实现
我们用vector来封装输入和输出,简单的按公式复现。
vector<double> softmax(vector<double> input)
{
double total=0;
for(auto x:input)
{
total+=exp(x);
}
vector<double> 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 ,防止爆精度。
大致表示如下:
实现
vector<double> softmax(vector<double> 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<double> 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 <iostream>
#include <vector>
#include <math.h>
using namespace std;
vector<double> softmax(vector<double> 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<double> 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<double> input;
while(n--)
{
double x;
cin>>x;
input.push_back(x);
}
for(auto y:softmax(input))
{
cout<<y<<' ';
}
}
以上就是C++实现softmax函数的面试经验的详细内容,更多关于C++ softmax函数的资料请关注其它相关文章!
相关推荐:
AI生成网页模板,轻松打造专业网站,ai网格画法
seo监控什么意思,seo数据监控 ,ai panda眼镜架
WPJam:打破网站管理的壁垒,打造极致用户体验,广东谷歌seo工具
SEO每日:提高网站流量的秘密武器,助你脱颖而出,seo优化和排名技巧
ChatGPT对于大数据发展的帮助:赋能行业变革,推动智能化未来,ai写作真的好吗
OpenAI银行卡扣款的公司是哪家?揭秘背后的支付流程与安全保障,AI素描相片
seo该从什么开始,seo是什么时候开始的 ,ai写作免费英文怎么说
seo要懂些什么软件,seo常用软件 ,ai写作网站网址大全
什么是SEO金融,seo是做什么的 ,ai中转程序
ChatGPT连了外网也登不了?如何解决这一问题,重新畅享AI助力!,ai少女大瓜
SEO技巧提升网站流量和排名,助力企业快速崛起,ai080206.
SEO立刻:快速提升网站排名,带你走在搜索引擎前沿,网站建设怎么推广好做
AI优化文章:如何利用人工智能提升写作效率和质量
什么是seo模型,seo模块总结 ,ai技术授课
seo逻辑是什么,seo思路 ,语音主播怎么ai写作业
ChatGPT已识别但不可用?揭秘背后原因与解决方案!,小狸ai和斑马ai语文
打造高效创作体验,写文章AI软件重塑内容生产力
SEO特点与实施策略:提升网站流量与排名的关键,定西抖音seo价格查询
ChatGLM不能搜索网页内容,你真的了解它的局限性吗?,ai修复情侣
SEO有话:如何用精准优化助力企业在线增长,食品微信营销推广
SEO占位:如何在竞争激烈的市场中占得先机?,梁平区省心全网营销推广
什么是seo技术,什么是seo及seo的作用 ,AI倒放仓鼠
ChatGPT维护-智能时代的数字助手,如何让你的工作更高效,ai智能救援
seo相关知识是什么,seo相关技术 ,ai写作讯飞星火认知大模型
Chato1免费么?揭开这款AI聊天机器人的神秘面纱,交个朋友ai写作
SEO自从上线后的演变与未来发展趋势,拼多多增加关键词排名
ChatGPT不登录,如何畅享AI的智能服务?,手信ai
SEO建议:如何通过优化提升网站流量,赢得市场竞争,自媒体网站免费推广平台
优化工具:提升工作效率的秘密武器,网站模板的优化策略是什么
SEM做得好可以取代SEO吗?浅析两者的异同与未来趋势,王道ai
一秒采集:提升效率、创造价值的秘密武器,苏州网站整站优化
软件AI:颠覆未来的智能革命
SEO搜索关键词是什么意思?让你轻松网站流量的秘密!,ai颜色不对
ChatGPT付款被拒?如何应对与解决常见支付问题,掉包ai
SEO单页网站:助力企业在线营销的一站式解决方案,湖南视频网站优化方式
seo稿件是什么意思,seo文章写作要求 ,ai写作未来展望和展望
SEO元素-提升网站排名的核心要素,推广分成网站有哪些
seo追词是什么,seo词条 ,52580609AI
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
什么是SEO可以自学吗,seo零基础可以自学吗 ,ai1紫
SEO刷:让你的网站一夜之间登顶搜索引擎!,独特seo技巧
SEO怎么设置:让你的网站快速登上搜索引擎首页的秘密,Ai压印分色
SEO范例:如何通过优化提升网站流量,获取更多商机,广州抖音seo搜索广告
SEO优化攻略:如何通过精准策略提升网站排名与流量,aI ow翻译
AI一键生成文章免费版:颠覆写作新体验
SEO学费多少钱?揭秘SEO培训的投资价值与回报!,郴州网站推广多少钱一个
怎么看文章是不是AI生成的?揭秘背后的玄机与技巧
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
seO经理是什么岗位,seo经理招聘 ,ai写作重复被查
SEO场景下的数字营销:如何通过精准优化提升网站流量,陕西融发建设集团网站