js实现“大模型”之明星识别(二),保存/加载训练模型和数据集

PS:点赞,评论,收藏,分享 防止迷路

接上一篇文章 js实现"大模型"之明星识别(一),训练和识别 我们实现了模型训练和识别,我们demo数据量少,训练时间不长,但是用于企业级的模型都很大,训练集,验证集 都很大,如果每一次 都要在代码里面训练然后实时输出会严重消耗计算资源

今天我们学习如何保存训练好的模型

保存训练好的模型可以避免每次都重新训练,从而节省时间和计算资源。在JavaScript中,如果你使用的是像brain.js这样的库,你可以通过以下步骤保存和加载模型:

  1. 保存模型:训练完成后,可以将模型导出为JSON格式并保存到本地文件或服务器。
  2. 加载模型:在需要使用模型的地方,从文件或服务器加载模型。

以下是一个使用brain.js库的示例:

一 保存模型

javascript 复制代码
const fs = require('fs');

// 假设 net 是你的神经网络实例
const json = net.toJSON();
fs.writeFileSync('model.json', JSON.stringify(json));

二 加载模型

javascript 复制代码
const fs = require('fs');
const brain = require('brain.js');

// 读取保存的模型文件
const modelJson = JSON.parse(fs.readFileSync('model.json', 'utf8'));

// 创建一个新的神经网络实例并从JSON加载模型
const net = new brain.NeuralNetwork();
net.fromJSON(modelJson);

通过这种方式,你可以在训练一次模型后将其保存,并在后续运行中加载该模型以进行预测,而无需重新训练。

三 保存加载训练数据

为什么要保存训练数据和训练好的模型:

  1. 重复训练:

    • 一致性:确保每次训练时使用的数据是一致的。这对于调试和验证模型性能非常重要。
    • 可重复性:科学研究和开发中强调实验的可重复性。保存训练数据可以确保其他人或未来的自己能够使用相同的数据集重现结果。
  2. 数据管理:

    • 备份:防止数据丢失。训练数据通常是宝贵的资源,保存它们可以防止意外删除或损坏。
    • 版本控制:通过版本控制系统(如Git)管理数据集的不同版本,便于追踪数据的变化和改进。
  3. 增量训练:

    • 更新模型:当有新的数据可用时,可以加载现有的训练数据并添加新数据进行增量训练,从而提高模型的准确性和泛化能力。
    • 持续学习:在某些应用场景中,模型需要不断学习新数据以适应变化的环境或需求。
  4. 分析和调试:

    • 数据检查:在训练前和训练后检查数据的质量和分布,帮助识别潜在的问题或偏差。
    • 调试模型:当模型表现不佳时,可以通过检查训练数据来诊断问题所在。
  5. 合规性和审计:

    • 合规要求:某些行业和应用领域有严格的合规要求,需要保存所有用于训练的数据以满足法律和监管标准。
    • 审计跟踪:便于审计人员审查模型的训练过程和数据来源,确保模型的合法性和透明性。
  6. 协作和共享:

    • 团队协作:在团队开发中,保存训练数据可以确保所有成员使用相同的数据集进行训练和评估。
    • 数据共享:在研究社区中,分享训练数据可以帮助其他研究人员复现实验结果或进一步研究。

示例:保存和加载训练数据

以下是如何在你的brainjs.js文件中保存和加载训练数据的示例:

保存训练数据

javascript 复制代码
const fs = require('fs');

// 准备训练数据
const trainingData = [
  { input: textToFeatures("高鼻梁 大眼睛"), output: [1, 0, 0] }, // 刘德华
  { input: textToFeatures("高鼻梁 小眼睛"), output: [0, 1, 0] }, // 张学友
  { input: textToFeatures("短发 圆脸"), output: [0, 0, 1] }, // 郭富城
  { input: textToFeatures("长发 方脸"), output: [1, 0, 0] }, // 刘德华
  { input: textToFeatures("尖下巴 厚嘴唇"), output: [0, 1, 0] }, // 张学友
  { input: textToFeatures("高鼻梁 短发"), output: [0, 0, 1] }, // 郭富城
];

// 保存训练数据到文件
fs.writeFileSync('trainingData.json', JSON.stringify(trainingData));

加载训练数据

javascript 复制代码
const fs = require('fs');

// 检查是否已经存在保存的训练数据文件
if (fs.existsSync('trainingData.json')) {
  // 读取保存的训练数据文件
  const trainingData = JSON.parse(fs.readFileSync('trainingData.json', 'utf8'));

  // 训练神经网络
  net.train(trainingData, {
    errorThresh: 0.005, // error threshold to reach
    iterations: 20000, // maximum training iterations
    log: true, // console.log() progress periodically
    logPeriod: 10, // number of iterations between logging
    learningRate: 0.3, // learning rate
  });

  // 保存训练好的模型
  const json = net.toJSON();
  fs.writeFileSync('model.json', JSON.stringify(json));
} else {
  // 准备训练数据
  const trainingData = [
    { input: textToFeatures("高鼻梁 大眼睛"), output: [1, 0, 0] }, // 刘德华
    { input: textToFeatures("高鼻梁 小眼睛"), output: [0, 1, 0] }, // 张学友
    { input: textToFeatures("短发 圆脸"), output: [0, 0, 1] }, // 郭富城
    { input: textToFeatures("长发 方脸"), output: [1, 0, 0] }, // 刘德华
    { input: textToFeatures("尖下巴 厚嘴唇"), output: [0, 1, 0] }, // 张学友
    { input: textToFeatures("高鼻梁 短发"), output: [0, 0, 1] }, // 郭富城
  ];

  // 训练神经网络
  net.train(trainingData, {
    errorThresh: 0.005, // error threshold to reach
    iterations: 20000, // maximum training iterations
    log: true, // console.log() progress periodically
    logPeriod: 10, // number of iterations between logging
    learningRate: 0.3, // learning rate
  });

  // 保存训练好的模型
  const json = net.toJSON();
  fs.writeFileSync('model.json', JSON.stringify(json));

  // 保存训练数据到文件
  fs.writeFileSync('trainingData.json', JSON.stringify(trainingData));
}

通过这种方式,你可以确保训练数据的安全性和一致性,并在需要时进行加载和使用。

PS:摸鱼创作不易 学会了记得,点赞,评论,收藏,分享

相关推荐
大耳朵爱学习9 小时前
Andrew Ng深度解析:普通人如何利用AI把想法变成工具,实现工作自动化(小白程序员必看)
运维·人工智能·ai·自动化·大模型·就业·大模型学习
lilihuigz9 小时前
会员网站实战:AI流量下滑后,如何用付费订阅与B2B实现增长
人工智能
中科三方9 小时前
AI时代新攻击面:悬空DNS记录正在成为黑客的低成本入侵入口
服务器·前端·人工智能
程序员大阳10 小时前
副队长JavaScript教程(53)-DOM操作元素的属性
javascript·dom·属性·setattribute·getattribuite
HackTwoHub10 小时前
红队低成本 IP 轮换方案 ProxyCat升级版,自动扩容代理池、负载分摊转发,一键部署,告别高价隧道代理
网络·人工智能·网络协议·tcp/ip·安全·web安全·网络安全
鲜于言悠90510 小时前
古籍OCR新解法:DDVR-Net让大模型只在字烂的时候出手
人工智能
华为LTCITR专栏流程专家许浩明10 小时前
ITR经验经典案例|服务ITR咨询|诚易达咨询公司许浩明团队辅导杰克科技服务ITR变革
大数据·人工智能·科技
寻道码路10 小时前
AI Agent 工程化开发实战(四):工具调用循环——解构 create_agent 背后的机制
人工智能·langchain·ai agent·工具调用·langgraph
JJJennie77710 小时前
MAI Gateway实战部署:大模型网关部署方案?从0到1上手指南
数据库·人工智能·gateway·ai网关
涛思数据(TDengine)10 小时前
支撑药企全球化合规:TDengine 发布中美欧三地监管对照白皮书
大数据·数据库·人工智能·ai·tdengine