欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)softmax函數(shù)的面試經(jīng)驗(yàn)

 更新時(shí)間:2022年05月18日 12:57:17   作者:concyclics  
這篇文章主要為大家介紹了C++實(shí)現(xiàn)softmax函數(shù)的面試經(jīng)驗(yàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

今天面試字節(jié)算法崗時(shí)被問到的問題,讓我用C++實(shí)現(xiàn)一個(gè)softmax函數(shù)。softmax是邏輯回歸在多分類問題上的推廣。大概的公式如下:

即判斷該變量在總體變量中的占比。

第一次實(shí)現(xiàn)

實(shí)現(xiàn)

我們用vector來封裝輸入和輸出,簡單的按公式復(fù)現(xiàn)。

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}

經(jīng)過簡單測試是正常的。

test 2

但是這時(shí)面試官提出了一個(gè)問題,即如果有較大輸入變量時(shí)會怎么樣?

  • 測試用例2: {1, 2, 3, 4, 5, 1000}
  • 測試輸出2: {0, 0, 0, 0, 0, nan}

由于 e^1000已經(jīng)溢出了雙精度浮點(diǎn)(double)所能表示的范圍,所以變成了NaN(not a number)。

第二次實(shí)現(xiàn)(改進(jìn))

改進(jìn)原理

我們注意觀察softmax的公式:

如果我們給上下同時(shí)乘以一個(gè)很小的數(shù),最后答案的值是不變的。

那我們可以給每一個(gè)輸入 x i 都減去一個(gè)值 a ,防止爆精度。

大致表示如下:

實(shí)現(xiàn)

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}

我們發(fā)現(xiàn)結(jié)果正常了。

完整代碼

#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++實(shí)現(xiàn)softmax函數(shù)的面試經(jīng)驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于C++ softmax函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Visual C++ 常用數(shù)據(jù)類型轉(zhuǎn)換方法詳解

    Visual C++ 常用數(shù)據(jù)類型轉(zhuǎn)換方法詳解

    本文純粹是總結(jié)一下有關(guān)類型轉(zhuǎn)換的貼子,需要的朋友可以參考下
    2017-06-06
  • C++基礎(chǔ)學(xué)習(xí)之函數(shù)重載的簡單介紹

    C++基礎(chǔ)學(xué)習(xí)之函數(shù)重載的簡單介紹

    函數(shù)重載是一種特殊情況,C++允許在同一作用域中聲明幾個(gè)類似的同名函數(shù),這些同名函數(shù)的形參列表(參數(shù)個(gè)數(shù),類型,順序)必須不同,常用來處理實(shí)現(xiàn)功能類似數(shù)據(jù)類型不同的問題。這篇文章主要給大家介紹了關(guān)于C++基礎(chǔ)學(xué)習(xí)之函數(shù)重載的相關(guān)資料,需要的朋友可以參考下
    2019-01-01
  • Microsoft Visual Studio 2022的安裝與使用詳細(xì)教程

    Microsoft Visual Studio 2022的安裝與使用詳細(xì)教程

    Microsoft Visual Studio 2022是Microsoft Visual Studio軟件的一個(gè)高版本,能夠編寫和執(zhí)行C/C++代碼,具有強(qiáng)大的功能,是開發(fā)C/C++程序的主流軟件,這篇文章主要介紹了Microsoft Visual Studio 2022的安裝與使用詳細(xì)教程
    2024-01-01
  • C/C++百行代碼實(shí)現(xiàn)熱門游戲消消樂功能的示例代碼

    C/C++百行代碼實(shí)現(xiàn)熱門游戲消消樂功能的示例代碼

    這篇文章主要介紹了C/C++百行代碼實(shí)現(xiàn)熱門游戲消消樂功能的示例代碼,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • C++中四種加密算法之DES源代碼

    C++中四種加密算法之DES源代碼

    本篇文章主要介紹了C++中四種加密算法之DES源代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。
    2016-11-11
  • C語言快速冪取模算法小結(jié)

    C語言快速冪取模算法小結(jié)

    這篇文章主要介紹了C語言快速冪取模算法,包括了算法的分析與改進(jìn),是很多程序設(shè)計(jì)競賽中常見的算法,需要的朋友可以參考下
    2014-09-09
  • C/C++實(shí)現(xiàn)遍歷文件夾最全方法總結(jié)

    C/C++實(shí)現(xiàn)遍歷文件夾最全方法總結(jié)

    這篇文章主要為大家介紹了C/C++實(shí)現(xiàn)遍歷文件夾功能的最全方法總結(jié),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能

    C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能

    本文主要介紹了C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C++實(shí)現(xiàn)鬧鐘程序的方法

    C++實(shí)現(xiàn)鬧鐘程序的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)鬧鐘程序的方法,比較實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • c語言中&的用法示例代碼

    c語言中&的用法示例代碼

    這篇文章主要給大家介紹了關(guān)于c語言中&的用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論