训练函数(Training Function)
async function trainModel(model, inputs, labels, surface) {
// 训练参数配置
const batchSize = 25; // 批大小
const epochs = 100; // 训练轮次
// 可视化回调配置(仅显示损失曲线)
const callbacks = tfvis.show.fitCallbacks(
surface,
['loss'], // 监控指标
{callbacks: ['onEpochEnd']} // 触发时机
);
// 执行训练
return await model.fit(inputs, labels, {
batchSize, // 自动批处理
epochs, // 迭代轮次
shuffle: true, // 启用数据混洗
callbacks // 挂载可视化回调
});
}
✅ 关键参数说明:
参数 | 类型 | 作用 |
---|---|---|
batchSize |
number |
控制梯度更新频率(值越小 → 训练越精细但速度越慢) |
shuffle |
boolean |
防止数据顺序影响训练效果(自动内部实现混洗逻辑) |
callbacks |
tf.Callback[] |
通过tfvis 实现实时损失曲线渲染(基于浏览器 GPU 加速) |
模型测试
模型训练完成后,必须对其进行测试与评估。具体方法是通过检查模型对不同输入的预测结果来进行验证。
✅ 但在进行预测前,需先对数据进行反标准化处理:
// 生成均匀分布的测试输入 (0到1之间100个点)
let unX = tf.linspace(0, 1, 100);
// 模型预测 (需要调整输入形状为[100,1])
let unY = model.predict(unX.reshape([100, 1]));
// 对输入和输出进行反标准化
const unNormunX = unX.mul(inputMax.sub(inputMin)).add(inputMin);
const unNormunY = unY.mul(labelMax.sub(labelMin)).add(labelMin);
// 将张量转换为 JavaScript 数组
unX = unNormunX.dataSync();
unY = unNormunY.dataSync();
✅ 随后可对(反标准化后的)结果进行分析:
const predicted = Array.from(unX).map((val, i) => {
return {x: val, y: unY[i]}
});
// 绘制结果曲线
tfPlot([values, predicted], surface1)
数据标准化
数据需经标准化处理后,才能被使用在神经网络。
对于数值型数据,采用最小-最大归一化(Min-Max Scaling)将数据范围调整至 [0, 1] 区间通常最为适宜。
const inputMin = inputTensor.min();
const inputMax = inputTensor.max();
const labelMin = labelTensor.min();
const labelMax = labelTensor.max();
const nmInputs = inputTensor.sub(inputMin).div(inputMax.sub(inputMin));
const nmLabels = labelTensor.sub(labelMin).div(labelMax.sub(labelMin));
Tensorflow 模型
机器学习模型是通过算法实现从输入数据到输出结果的映射体系。
✅ 本示例通过三行代码完成机器学习模型定义:
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [1], units: 1, useBias: true}));
model.add(tf.layers.dense({units: 1, useBias: true}));
1. 顺序式机器学习模型(Sequential ML Model)
const model = tf.sequential();
用于创建顺序式机器学习模型。
顺序式模型中,数据从输入层直接流向输出层。其他模型可能支持多输入/多输出结构。顺序式模型是最基础的机器学习模型结构,支持逐层堆叠构建,各层权重仅与下一层相关联。
2. TensorFlow 层(神经网络层组件)
model.add()
方法用于向模型添加两个神经网络层。
tf.layer.dense
是一种通用全连接层,其核心计算逻辑为:输入数据与权重矩阵相乘后叠加偏置项。
3. 张量形状与神经元单元数(Shapes and Units)
inputShape: [1]
表示输入维度为 1(对应单一特征:马力值x
)。
units: 1
定义了权重矩阵的尺寸:每个输入特征(x
值)对应 1 个权重参数。
模型编译(Compiling a Model)
✅ 编译模型时,可以使用指定的优化器和损失函数:
model.compile({loss: 'meanSquaredError', optimizer:'sgd'});
编译器配置为使用 SGD(随机梯度下降)优化器,该优化器实现简单且训练效果显著。
均方误差(Mean Squared Error,MSE)是用于量化模型预测值与真实值差异的核心损失函数。
评论区 0
发表评论
教程介绍
机器学习是人工智能的子领域,通过算法让计算机从数据中自动学习规律,并做出预测或决策。
29
章节
33
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈