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

如何导出LogisticRegressionCV模型并在Flutter中实现部署

解决方案

一、导出训练好的LogisticRegressionCV模型

scikit-learn训练的模型优先使用joblib做序列化导出,相比pickle对大数组类的模型序列化效率更高:

  1. 首先安装依赖(如果没装的话):
    pip install joblib
  2. 训练完成后直接导出模型文件:
import joblib
# 假设你训练完成的模型变量名为lr_clf
joblib.dump(lr_clf, "cat_dog_clf.joblib")

如果需要跨版本兼容,导出前可以先打印当前scikit-learn版本,后续模型转换环节使用相同版本即可避免不兼容问题:
print(sklearn.__version__)

二、Flutter端集成流程

Flutter无法直接加载scikit-learn的原生模型文件,需要先做格式转换,推荐两种可落地的方案:

方案1:转换为ONNX格式推理(适配性高)

ONNX是通用的开放神经网络交换格式,移动端有成熟的推理支持:

  1. 首先把joblib/pkl格式的模型转为ONNX:
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType

# 这里的输入维度要和你训练时的输入维度完全一致,比如你把224*224*3的RGB图展平为150528维向量,就填对应数值
initial_type = [('input', FloatTensorType([None, 150528]))]
onnx_model = convert_sklearn(lr_clf, initial_types=initial_type)

# 保存ONNX模型
with open("cat_dog_clf.onnx", "wb") as f:
    f.write(onnx_model.SerializeToString())
  1. Flutter端集成:
    在pubspec.yaml中引入ONNX运行时的Flutter封装库,把转换好的cat_dog_clf.onnx放到项目的assets目录下声明。推理时先对输入图片做和训练阶段完全一致的预处理:缩放到对应尺寸、像素归一化、展平为一维向量,再传入ONNX运行时得到输出结果,最后按阈值(默认0.5)判断分类结果即可。

方案2:手动导出参数轻量实现(包体积更小)

逻辑回归的推理逻辑非常简单,本质是 sigmoid(输入特征 × 权重 + 偏置),你可以直接导出模型参数手动实现推理,不需要引入额外的推理库:

  1. 导出模型参数:
import json
# 导出权重和偏置
params = {
    "coef": lr_clf.coef_.tolist(),
    "intercept": lr_clf.intercept_.tolist(),
    "input_dim": lr_clf.n_features_in_
}
with open("lr_params.json", "w") as f:
    json.dump(params, f)
  1. Flutter端把lr_params.json放到assets目录加载,自己实现sigmoid函数和矩阵乘法逻辑,输入图片预处理完成后直接计算输出结果即可。

关键注意事项

  • 移动端的图片预处理逻辑必须和训练阶段完全对齐,包括图片缩放尺寸、插值方式、像素归一化规则、通道顺序(RGB/BGR),否则会出现明显的准确率下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:03