TensorFlow 模型
TensorFlow.js 是一个基于 JavaScript 的机器学习库,支持在浏览器环境中直接训练和部署机器学习模型。
在机器学习中,模型(Models)和层(Layers)是核心的基础构建单元。
针对不同的机器学习任务,开发者需要将多种类型的神经网络层组合成一个可训练的模型,该模型能够通过数据学习并预测未来值。
TensorFlow.js 全面支持多种模型架构和神经网络层类型,为开发者提供灵活的机器学习构建模块。
在 TensorFlow 中,模型(Model)本质上是一个包含一个或多个神经网络层(Layers)的神经网络架构。
TensorFlow 项目
✅ TensorFlow 项目标准工作流程如下:
数据收集 → 创建模型 → 添加网络层 → 编译模型 → 训练模型 → 使用模型
步骤名称 | 英文术语 | 技术说明 |
---|---|---|
数据收集 | Collecting Data | 获取原始数据集并进行预处理 |
创建模型 | Creating a Model | 初始化神经网络架构 |
添加网络层 | Adding Layers | 构建神经网络层次结构 |
编译模型 | Compiling | 配置优化器和损失函数 |
训练模型 | Training | 使用数据训练模型参数 |
使用模型 | Using | 进行预测或部署应用 |
TensorFlow 实例
✅ 假设已知一个定义直线的函数:y = 1.2x + 5
,你可以使用 JavaScript 公式计算任意y
值:
y = 1.2 * x + 5;
✅ 为演示 TensorFlow.js 的功能,我们可以训练一个 TensorFlow.js 模型,使其能够根据输入x
值预测对应的y
值:
// 创建训练数据
const xs = tf.tensor([0, 1, 2, 3, 4]);
const ys = xs.mul(1.2).add(5);
// 定义线性回归模型
const model = tf.sequential();
model.add(tf.layers.dense({units:1, inputShape:[1]}));
// 配置损失函数和优化器
model.compile({loss:'meanSquaredError', optimizer:'sgd'});
// 训练模型
model.fit(xs, ys, {epochs:500}).then(() => {myFunction()});
// 使用模型进行预测
function myFunction() {
const xMax = 10;
const xArr = [];
const yArr = [];
for (let x = 0; x <= xMax; x++) {
let result = model.predict(tf.tensor([Number(x)]));
result.data().then(y => {
xArr.push(x);
yArr.push(Number(y));
if (x == xMax) {plot(xArr, yArr)};
});
}
}
下面是该示例的完整技术解析。
数据收集(Collecting Data)
✅ 创建包含 5 个x
值的张量(xs):
const xs = tf.tensor([0, 1, 2, 3, 4]);
✅ 创建包含 5 个对应y
值的张量(ys)(将xs乘以 1.2 再加 5):
const ys = xs.mul(1.2).add(5);
创建模型(Creating a Model)
✅ 使用tf.sequential()
方法,创建顺序模型:
const model = tf.sequential();
在顺序模型(Sequential Model)中,前一层的输出将自动作为下一层的输入。
添加网络层(Adding Layers)
为模型添加一个全连接层(Dense Layer)
✅ 该网络层配置为单神经元单元(输出张量维度为 1):
model.add(tf.layers.dense({units:1, inputShape:[1]}));
在全连接层(Dense Layer)中,每个神经元节点都与前一层的所有节点实现全互联。
编译模型(Compiling the Model)
✅ 使用均方误差(meanSquaredError)作为损失函数,随机梯度下降(sgd)作为优化器来编译模型:
model.compile({loss:'meanSquaredError', optimizer:'sgd'});
TensorFlow 优化器
优化器名称 | 实现算法 | 技术说明 |
---|---|---|
Adadelta | 实现 Adadelta 算法 | 自适应学习率方法,无需设置初始学习率,适合 RNN 训练 |
Adagrad | 实现 Adagrad 算法 | 参数特定学习率,适合稀疏数据,内存占用较高 |
Adam | 实现 Adam 算法 | 结合动量与 RMSProp,默认推荐优化器 |
Adamax | 实现 Adamax 算法 | Adam 的变体,使用无穷范数,对嵌入层效果更好 |
Ftrl | 实现 FTRL 算法 | Follow-the-Regularized-Leader,适合大规模线性模型 |
Nadam | 实现 NAdam 算法 | Adam 与 Nesterov 动量的结合 |
Optimizer | Keras 优化器基类 | 所有优化器的抽象基类,可用于自定义优化器 |
RMSprop | 实现 RMSprop 算法 | 自适应学习率,对循环神经网络效果显著 |
SGD | 随机梯度下降优化器 | 基础优化器,可配置动量和学习率衰减 |
训练模型(Training the Model)
✅ 训练模型(使用 xs 和 ys 数据)并进行 500 次迭代(epochs):
model.fit(xs, ys, {epochs:500}).then(() => {myFunction()});
使用模型(Using the Model)
在模型训练完成之后,可以将其用做许多种不同的用途。
✅ 下面这个例子根据给定的 10 个x
值预测出 10 个y
值,并调用函数将预测结果绘制成图表:
function myFunction() {
const xMax = 10;
const xArr = [];
const yArr = [];
for (let x = 0; x <= xMax; x++) {
let result = model.predict(tf.tensor([Number(x)]));
result.data().then(y => {
xArr.push(x);
yArr.push(Number(y));
if (x == xMax) {plot(xArr, yArr)};
});
}
}
✅ 下面这个例子根据给定的 10 个x
值预测出 10 个y
值,并调用函数显示预测结果:
function myFunction() {
const xMax = 10;
const xArr = [];
const yArr = [];
for (let x = 0; x <= xMax; x++) {
let result = model.predict(tf.tensor([Number(x)]));
result.data().then(y => {
xArr.push(x);
yArr.push(Number(y));
if (x == xMax) {display(xArr, yArr)};
});
}
}
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈