You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义TFLite疾病识别模型Python运行正常,Android Studio预测错误

问题1:输出概率最大值查找逻辑完全写反(核心错误)

你当前的输出后处理代码是在找最小的概率值,而不是模型推理需要的最大概率值:

// 错误代码:逻辑为筛选最小值
if(maxNum>outputArray[i]){
    modelOutputIndex=i;
    maxNum=outputArray[i];
}

修正为如下逻辑即可:

// 正确代码:筛选最大概率对应的索引
if(outputArray[i] > maxNum){
    modelOutputIndex = i;
    maxNum = outputArray[i];
}

这是你无论输入任何值都返回错误预测结果的最核心原因。

问题2:输入特征漏处理最后一个选中的症状

你当前提取选中症状的逻辑仅会处理到逗号位置,末尾没有逗号的最后一个症状会被完全忽略:比如用户输入发热,咳嗽,字符串末尾没有逗号,咳嗽这个症状不会被写入model_input数组,导致输入特征缺失。
修正方案:原有循环结束后额外处理最后一段内容:

// 原有遍历逗号的循环结束后补充以下代码
if (startIndex < itemsSelected.length()) {
    String s = itemsSelected.substring(startIndex).trim();
    int currIndex = symptomList.indexOf(s);
    if (currIndex >= 0) {
        model_input[currIndex] = 1.0F;
    }
}

问题3:输入张量形状不匹配

你训练的模型输入形状应该是[1, 132](batch size为1,特征数132),但你当前构造的inputBuffer没有匹配batch维度,部分版本的TFLite解释器会因为形状不匹配出现推理异常。
修正方案:使用TensorBuffer封装输入更稳妥,替换原有inputBuffer构造逻辑即可:

TensorBuffer inputBuffer = TensorBuffer.createFixedSize(new int[]{1, 132}, DataType.FLOAT32);
inputBuffer.loadArray(model_input);
interpreter.run(inputBuffer.getBuffer(), outputBuffer.getBuffer());

问题4:重复加载模型的异常风险

你每次点击按钮都会重新加载TFLite模型,不仅性能极低,如果加载失败还会触发空指针异常。建议把Interpreter的初始化放到onCreate方法中全局初始化一次即可。

内容的提问来源于stack exchange,提问作者Nikhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:54:03