PS:点赞,评论,收藏,分享 防止迷路
接上一篇文章 js实现"大模型"之明星识别(一),训练和识别 我们实现了模型训练和识别,我们demo数据量少,训练时间不长,但是用于企业级的模型都很大,训练集,验证集 都很大,如果每一次 都要在代码里面训练然后实时输出会严重消耗计算资源
今天我们学习如何保存训练好的模型
保存训练好的模型可以避免每次都重新训练,从而节省时间和计算资源。在JavaScript中,如果你使用的是像brain.js
这样的库,你可以通过以下步骤保存和加载模型:
- 保存模型:训练完成后,可以将模型导出为JSON格式并保存到本地文件或服务器。
- 加载模型:在需要使用模型的地方,从文件或服务器加载模型。
以下是一个使用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);
通过这种方式,你可以在训练一次模型后将其保存,并在后续运行中加载该模型以进行预测,而无需重新训练。
三 保存加载训练数据
为什么要保存训练数据和训练好的模型:
-
重复训练:
- 一致性:确保每次训练时使用的数据是一致的。这对于调试和验证模型性能非常重要。
- 可重复性:科学研究和开发中强调实验的可重复性。保存训练数据可以确保其他人或未来的自己能够使用相同的数据集重现结果。
-
数据管理:
- 备份:防止数据丢失。训练数据通常是宝贵的资源,保存它们可以防止意外删除或损坏。
- 版本控制:通过版本控制系统(如Git)管理数据集的不同版本,便于追踪数据的变化和改进。
-
增量训练:
- 更新模型:当有新的数据可用时,可以加载现有的训练数据并添加新数据进行增量训练,从而提高模型的准确性和泛化能力。
- 持续学习:在某些应用场景中,模型需要不断学习新数据以适应变化的环境或需求。
-
分析和调试:
- 数据检查:在训练前和训练后检查数据的质量和分布,帮助识别潜在的问题或偏差。
- 调试模型:当模型表现不佳时,可以通过检查训练数据来诊断问题所在。
-
合规性和审计:
- 合规要求:某些行业和应用领域有严格的合规要求,需要保存所有用于训练的数据以满足法律和监管标准。
- 审计跟踪:便于审计人员审查模型的训练过程和数据来源,确保模型的合法性和透明性。
-
协作和共享:
- 团队协作:在团队开发中,保存训练数据可以确保所有成员使用相同的数据集进行训练和评估。
- 数据共享:在研究社区中,分享训练数据可以帮助其他研究人员复现实验结果或进一步研究。
示例:保存和加载训练数据
以下是如何在你的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:摸鱼创作不易 学会了记得,点赞,评论,收藏,分享