如何在C语言中实现Matlab的vec2ind函数处理神经网络分类输出
Matlab vec2ind函数的C语言实现方案
前置说明
你的输出层使用sigmoid激活后得到的output2是浮点类型数组,受计算精度影响不会刚好出现整数1,因此需要设置阈值判断对应位置是否为one-hot编码的1位置,另外Matlab的vec2ind返回的是1起始索引,C语言数组默认0起始,可根据需求调整。
功能实现代码
独立vec2ind封装函数
/** * 实现与Matlab vec2ind一致的功能 * @param vec 输入的one-hot向量数组 * @param vec_len 输入向量的长度 * @param threshold 判定为1的浮点阈值,建议设为0.9~0.99 * @return 1所在的位置索引,默认返回Matlab风格1起始值,未找到返回-1做异常处理 */ int vec2ind(double *vec, int vec_len, double threshold) { for (int i = 0; i < vec_len; i++) { if (vec[i] >= threshold) { // 找到后立即返回,终止后续遍历 return i + 1; // 如果需要C风格0起始索引,改为return i即可 } } // 异常场景:未找到符合条件的1位置 return -1; }
调用示例(接在你现有代码之后)
// 你的输出层计算代码执行完成后直接调用 int class_index = vec2ind(output2, 7, 0.95); // class_index即为分类结果索引
注意事项
- 不要直接用
vec[i] == 1做判断,浮点计算精度问题会导致匹配失败 - 阈值可根据你的模型实际输出情况调整,保证能匹配到one-hot的目标位置即可
内容的提问来源于stack exchange,提问作者hasan
相关产品推荐
相关产品推荐

