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

在Windows浏览器中用TensorFlow.js如何实现模型本地磁盘存读?

TensorFlow.js 模型本地保存与加载实现方案

针对你基于MobileNet训练图像分类模型的场景,以下是具体的本地保存和加载操作步骤,分浏览器和Node.js两种环境说明:

一、保存训练后的模型及分类器数据

1. 浏览器环境(下载到本地)

在浏览器中,TensorFlow.js支持直接触发下载,将模型打包为zip文件保存到本地:

// 保存MobileNet模型(浏览器自动下载zip包,包含model.json和权重文件)
await _net.model.save('downloads://my-image-model');

如果你的代码中使用了knnClassifier(即代码里的_classifier),仅保存MobileNet模型不够,还需要单独保存分类器的训练数据:

// 导出KNN分类器的数据集
const classifierDataset = _classifier.getClassifierDataset();
// 将分类器数据保存为本地文件
await tf.io.save('downloads://my-classifier-data', {
  modelArtifactsInfo: { dateSaved: new Date() },
  weights: classifierDataset
});

2. Node.js环境(写入本地磁盘)

在Node.js环境下,使用tf.node.save()直接将模型写入指定路径:

const tf = require('@tensorflow/tfjs-node');

// 保存模型到本地目录
await tf.node.save(_net.model, 'file://./saved-models/my-image-model');

同样,针对KNN分类器,需要序列化其数据后写入文件:

const fs = require('fs');
const classifierDataset = _classifier.getClassifierDataset();

// 序列化分类器数据为JSON格式
const serializedData = JSON.stringify(
  Object.fromEntries(
    Object.entries(classifierDataset).map(([key, tensor]) => [key, Array.from(tensor.dataSync())])
  )
);
// 写入本地文件
fs.writeFileSync('./saved-models/classifier-data.json', serializedData);

二、从本地加载模型及分类器数据

1. 浏览器环境(从本地文件加载)

通过文件选择器让用户上传之前保存的文件,然后加载:

// 加载模型(绑定文件输入框事件)
document.getElementById('model-upload').addEventListener('change', async (e) => {
  const modelFile = e.target.files[0];
  _net.model = await tf.loadLayersModel(tf.io.browserFiles([modelFile]));
});

// 加载KNN分类器数据
document.getElementById('classifier-upload').addEventListener('change', async (e) => {
  const classifierFile = e.target.files[0];
  const reader = new FileReader();
  reader.onload = () => {
    const serializedData = JSON.parse(reader.result);
    const classifierDataset = Object.fromEntries(
      Object.entries(serializedData).map(([key, data]) => [key, tf.tensor(data)])
    );
    _classifier.setClassifierDataset(classifierDataset);
  };
  reader.readAsText(classifierFile);
});

2. Node.js环境(从本地路径加载)

直接从指定目录加载模型和分类器数据:

const tf = require('@tensorflow/tfjs-node');
const fs = require('fs');

// 加载本地模型
_net.model = await tf.loadLayersModel('file://./saved-models/my-image-model/model.json');

// 加载KNN分类器数据
const serializedData = fs.readFileSync('./saved-models/classifier-data.json', 'utf8');
const classifierDataset = Object.fromEntries(
  Object.entries(JSON.parse(serializedData)).map(([key, data]) => [key, tf.tensor(data)])
);
_classifier.setClassifierDataset(classifierDataset);

关键提示

  • 如果你仅用MobileNet做特征提取,核心训练数据在KNN分类器中,其实无需重复保存MobileNet,直接重新加载官方预训练模型即可,这样能节省存储空间:
    // 重新加载官方MobileNet,无需自己保存
    _net = await mobilenet.load();
    
  • 模型加载时,model.json必须和对应的权重文件放在同一目录下,否则会加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:25:19