output1 = output_tensors_[1]; output2 = output_tensors_[2]; std::vector<float> list; printf("pre %f tanker 0\n ", output0.data[0]); printf("pre %f truck 1\n ", output0.data[1]); list.emplace_back(output0.data[0]); list.emplace_back(output0.data[1]); std::vector<float> res = softmax(list, 1); 优化下这段代码
时间: 2024-01-17 19:04:57 浏览: 151
可以通过使用C++11的lambda表达式和算法函数来优化这段代码,同时避免手动计算softmax函数。
```cpp
output1 = output_tensors_[1];
output2 = output_tensors_[2];
std::vector<float> list;
printf("pre %f tanker 0\n ", output0.data[0]);
printf("pre %f truck 1\n ", output0.data[1]);
list.emplace_back(output0.data[0]);
list.emplace_back(output0.data[1]);
// 计算softmax函数
float max_val = *std::max_element(list.begin(), list.end());
std::transform(list.begin(), list.end(), list.begin(), [max_val](float val) {
return std::exp(val - max_val);
});
float sum = std::accumulate(list.begin(), list.end(), 0.0f);
std::transform(list.begin(), list.end(), list.begin(), [sum](float val) {
return val / sum;
});
std::vector<float> res(list.size());
std::copy(list.begin(), list.end(), res.begin());
```
这段代码中,使用了`std::max_element`找到列表中的最大值,然后使用`std::transform`计算每个元素的指数,并使用`std::accumulate`求和。最后,再次使用`std::transform`将每个元素除以总和,得到最终的softmax结果。
阅读全文