Open In App

Tensorflow.js tf.callbacks.earlyStopping() Function

Last Updated : 14 Mar, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Tensorflow.js is an open-source library developed by Google for running machine learning models and deep learning neural networks in the browser or node environment. 

Tensorflow.js tf.callbacks.earlyStopping() is a callback function used for stopping training when training data stop improving. 

Syntax:

tf.callbacks.earlyStopping(args);

Parameters: This method accepts the following parameters.

  • args: It is an object with the following fields:
    • monitor: It should be a string. It is the value that is to be monitored.
    • minDelta: It should be a number. It is the minimum value below which is not considered an improvement in training.
    • patience: It should be a number. It is the number of times it should not stop when it encounters a value that is below than minDelta.
    • verbose: It should be a number. It is the value of verbosity.
    • mode: It should be one of these three:
      • “auto”: In auto mode, the direction is inferred automatically from the name of the monitored quantity.
      • “min”: In min mode, training will stop when the value of data that is monitored stop decreasing.
      • “max”: In max mode, training will stop when the value of data that is monitored stop increasing.
    • baseline: It should be a number. It is the number that tells when training doesn’t keep up with this value training will stop. It is the end line for the quantity which is monitored.
    • restoreBestWeights: It should be a boolean value. It tells whether to restore the best value from the monitored quantity in each epoch or not.

Return Value: It returns an object (EarlyStopping).

Below are some examples of this function.

Example 1: In this example we will see how to use tf.callbacks.earlyStopping() function in fitDataset:

Javascript




import * as tf from "@tensorflow/tfjs";
  
const xArray = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [8, 7, 6, 5],
    [1, 2, 3, 4],
];
  
const x1Array = [
    [0, 1, 0.5, 0],
    [1, 0.5, 0, 1],
    [0.5, 1, 1, 0],
    [1, 0, 0, 1],
];
  
const yArray = [1, 2, 3, 4];
const y1Array = [4, 3, 2, 1];
  
// Create a dataset from the JavaScript array.
const xDataset = tf.data.array(xArray);
const x1Dataset = tf.data.array(x1Array);
const y1Dataset = tf.data.array(x1Array);
const yDataset = tf.data.array(yArray);
  
// Combining the Dataset with zip function
const xyDataset = tf.data
    .zip({ xs: xDataset, ys: yDataset })
    .batch(4)
    .shuffle(4);
const xy1Dataset = tf.data
    .zip({ xs: x1Dataset, ys: y1Dataset })
    .batch(4)
    .shuffle(4);
  
// Creating model
const model = tf.sequential();
model.add(
    tf.layers.dense({
        units: 1,
        inputShape: [4],
    })
);
  
// Compiling model
model.compile({ loss: "meanSquaredError"
    optimizer: "sgd", metrics: ["acc"] });
  
// Using tf.callbacks.earlyStopping in fitDataset.
const history = await model.fitDataset(xyDataset, {
    epochs: 10,
    validationData: xy1Dataset,
    callbacks: tf.callbacks.earlyStopping({ 
        monitor: "val_acc" }),
});
  
// Printing value
console.log("The value of val_acc is :"
    history.history.val_acc);


Output: The value you get is different because with training value its val_acc value changes.

The value of val_acc is :0.4375,0.375

Example 2: In this example, we will see how to use tf.callbacks.earlyStopping() with fit:

Javascript




import * as tf from "@tensorflow/tfjs";
  
// Creating tensor for training
const x = tf.tensor([5, 6, 7, 8, 9, 2], [3, 2]);
const x1 = tf.tensor([8, 7, 6, 5, 2, 9], [3, 2]);
const y = tf.tensor([1, 3, 3, 4, 4, 6, 6, 8, 9], [3, 3]);
const y1 = tf.tensor([2, 2, 2, 1, 5, 5, 2, 3, 8], [3, 3]);
  
// Creating model
const model = tf.sequential();
  
model.add(
    tf.layers.dense({
        units: 3,
        inputShape: [2],
    })
);
  
// Compiling model
model.compile({ loss: "meanSquaredError"
    optimizer: "sgd", metrics: ["acc"] });
  
// Using tf.callbacks.earlyStopping in fit.
const history = await model.fit(x, y, {
    epochs: 10,
    validationData: [x1, y1],
    callbacks: tf.callbacks.earlyStopping({ 
        monitor: "val_acc" }),
});
  
// Printing value
console.log("the value of val_acc is :"
    history.history.val_acc);


Output: The value of your executing code will be different because with training data value changes:

the value of val_acc is : 0.3333333432674408,0.3333333432674408

Reference: https://js.tensorflow.org/api/latest/#callbacks.earlyStopping



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads