Tensorflow.js tf.Sequential 类 .fit() 方法
Tensorflow.js 是谷歌开发的一个开源库,用于在浏览器或节点环境中运行机器学习模型和深度学习神经网络。
Tensorflow.jstf.Sequential 类的 .fit() 方法用于训练模型以固定数量的 epoch(数据集上的迭代)。
句法:
model.fit( x, y, args?);
参数:此方法接受以下参数:
- x:包含所有输入数据的是 tf.Tensor。
- y:包含所有输出数据的是 tf.Tensor。
- args:对象类型,变量如下:
- batchSize:它定义将通过训练传播的样本数量。
- epochs:它定义了训练数据数组的迭代。
- 详细:它有助于显示每个时期的进度。
如果值为 0 – 这意味着在 fit() 调用期间没有打印消息。如果值为 1 - 这意味着在 Node-js 中,它会打印进度条。在浏览器中它没有显示任何操作。值 1 是默认值。 2 – 值 2 尚未实现。 - 回调:它定义了在训练期间要调用的回调列表。变量可以有一个或多个回调 onTrainBegin()、onTrainEnd()、onEpochBegin()、onEpochEnd()、onBatchBegin()、onBatchEnd()、onYield()。
- validationSplit:用户可以轻松地将训练数据集拆分为训练和验证。
例如:如果它的值是validation-Split = 0.5,这意味着在洗牌之前使用最后50%的数据进行验证。 - validationData:用于在最终模型之间进行选择时给出最终模型的估计值。
- shuffle:这个值定义了每个 epoch 之前数据的 shuffle。当 stepPerEpoch 不为空时,它没有效果。
- classWeight:用于对损失函数进行加权。告诉模型更多地关注来自代表性不足的类的样本可能很有用。
- sampleWeight:它是应用于每个样本的模型损失的权重数组。
- initialEpoch:它是定义开始训练的时期的值。这对于恢复以前的训练运行很有用。
- stepsPerEpoch:它定义了在宣布一个 epoch 完成并开始下一个 epoch 之前的样本批次数。如果未确定,则等于 1。
- validationSteps:如果指定了stepsPerEpoch,则相关。停止前要验证的步骤总数。
- yieldEvery:它定义了将主线程让给其他任务的频率的配置。它可以是自动的,这意味着屈服以一定的帧速率发生。批次,如果值是这个,它会产生每批次。 epoch,如果值是这个,它会产生每个 epoch。任何数字,如果值是任何数字,它会产生每个数字毫秒。从不,如果值是这个,它永远不会产生。
回报:承诺<历史>
示例 1:在此示例中,我们将通过默认配置训练我们的模型。
Javascript
import * as tf from "@tensorflow/tfjs"
// Creating model
const model = tf.sequential( ) ;
// Adding layer to model
const config = {units: 1, inputShape: [1]}
const x = tf.layers.dense(config);
model.add(x);
// Compiling the model
const config2 = {optimizer: 'sgd', loss: 'meanSquaredError'}
model.compile(config2);
// Tensor for training
const xs = tf.tensor2d([1, 1.2,1.65, 1.29, 1.4, 1.7], [6, 1]);
const ys = tf.tensor2d([1, 0.07,0.17, 0.29, 0.43, 1.02], [6, 1]);
// Training the model
const Tm = await model.fit(xs, ys);
// Printing the loss after training
console.log("Loss " + " : " + Tm.history.loss[0]);
Javascript
import * as tf from "@tensorflow/tfjs"
// Creating model
const Model = tf.sequential( ) ;
// Adding layer to model
const config = {units: 4, inputShape: [2],
activation : "sigmoid"}
const x = tf.layers.dense(config);
Model.add(x);
const config2 = {units: 3,
activation : "sigmoid"}
const y = tf.layers.dense(config2);
Model.add(y);
// Compiling the model
const sgdOpt = tf.train.sgd(0.6)
const config3 = {optimizer: 'sgd', loss: 'meanSquaredError'}
Model.compile(config3);
// Test Tensor
const xs = tf.tensor2d([ [0.3, 0.24],
[0.12, 0.73],
[0.9, 0.54]
]);
const ys = tf.tensor2d([ [0.43, 0.5, 0.92],
[0.1, 0.39, 0.12],
[0.76, 0.4, 0.92]
]);
// Training the model
for( let i = 0; i < 5; i++){
const config = { shuffle : true, epoch : 10 }
const Tm = await Model.fit(xs, ys, config);
// Printing the loss after training
console.log("Loss " + " : " + Tm.history.loss[0]);
}
输出:
Loss after Epoch : 2.8400533199310303
示例 2:在此示例中,将通过一些配置来训练我们的模型。
Javascript
import * as tf from "@tensorflow/tfjs"
// Creating model
const Model = tf.sequential( ) ;
// Adding layer to model
const config = {units: 4, inputShape: [2],
activation : "sigmoid"}
const x = tf.layers.dense(config);
Model.add(x);
const config2 = {units: 3,
activation : "sigmoid"}
const y = tf.layers.dense(config2);
Model.add(y);
// Compiling the model
const sgdOpt = tf.train.sgd(0.6)
const config3 = {optimizer: 'sgd', loss: 'meanSquaredError'}
Model.compile(config3);
// Test Tensor
const xs = tf.tensor2d([ [0.3, 0.24],
[0.12, 0.73],
[0.9, 0.54]
]);
const ys = tf.tensor2d([ [0.43, 0.5, 0.92],
[0.1, 0.39, 0.12],
[0.76, 0.4, 0.92]
]);
// Training the model
for( let i = 0; i < 5; i++){
const config = { shuffle : true, epoch : 10 }
const Tm = await Model.fit(xs, ys, config);
// Printing the loss after training
console.log("Loss " + " : " + Tm.history.loss[0]);
}
输出:
Loss : 0.1362573206424713
Loss : 0.13617873191833496
Loss : 0.13610021770000458
Loss : 0.13602176308631897
Loss : 0.13594339787960052
参考: https://js.tensorflow.org/api/3.8.0/#tf.Sequential.fit