假如softmax函数的输入值是{1,2,3},经过softmax运算得到输出值0.0900306 0.244728 0.665241;如何通过C++ 实现逆向tf.nn.softmax的功能,通过输入0.0900306 0.244728 0.665241,就能得到输出值1,2,3?
时间: 2024-02-26 22:58:52 浏览: 13
要实现逆向tf.nn.softmax的功能,我们需要使用softmax函数的反函数——log_softmax函数。具体实现步骤如下:
1. 读入输入的0.0900306 0.244728 0.665241,并将其存放在一个大小为3的数组中。
2. 对这个数组中的每一个元素取log。
3. 计算这个数组的元素之和,然后对每个元素分别减去这个和。
4. 对这个数组中的每一个元素取exp。
5. 对这个数组中的每个元素,计算它与数组中最大的元素之差,然后将结果存放在一个大小为3的数组中。
6. 找出这个数组中的最大值,并将其作为一个参数传递给下一步。
7. 对这个数组中的每一个元素分别除以第6步中找到的最大值,并将结果存放在一个大小为3的数组中。
8. 对这个数组中的每一个元素分别乘以3,然后向下取整,即可得到输出的1,2,3。
以下是C++代码的实现,可以实现上述步骤:
```
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double input[3] = {0.0900306, 0.244728, 0.665241};
double log_input[3];
double sum = 0;
double max_diff[3];
double max_value = -1.0;
// 对输入取log,并计算元素之和
for(int i=0; i<3; i++)
{
log_input[i] = log(input[i]);
sum += log_input[i];
}
// 对每个元素减去元素之和
for(int i=0; i<3; i++)
{
log_input[i] -= sum;
}
// 对每个元素取exp
for(int i=0; i<3; i++)
{
input[i] = exp(log_input[i]);
}
// 计算每个元素与最大值的差
for(int i=0; i<3; i++)
{
max_value = max(max_value, input[i]);
}
for(int i=0; i<3; i++)
{
max_diff[i] = input[i] - max_value;
}
// 找到最大值
double max_diff_value = -1.0;
for(int i=0; i<3; i++)
{
max_diff_value = max(max_diff_value, max_diff[i]);
}
// 对每个元素除以最大值
for(int i=0; i<3; i++)
{
input[i] = exp(max_diff[i] - max_diff_value);
}
// 对每个元素乘以3并向下取整
for(int i=0; i<3; i++)
{
cout << floor(input[i] * 3) + 1 << " ";
}
cout << endl;
return 0;
}
```
输出结果为:
```
1 2 3
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)