Función Tensorflow.js tf.train.adam()

Tensorflow.js es una biblioteca de JavaScript desarrollada por Google para ejecutar y entrenar el modelo de aprendizaje automático en el navegador o en Node.js.

El optimizador de Adam (o Estimación de momento adaptativo) es un método de descenso de gradiente estocástico que se basa en la estimación adaptativa de momentos de primer y segundo orden. La técnica de optimización es altamente eficiente cuando se trabaja con grandes conjuntos de datos y parámetros. Para obtener más detalles, consulte este artículo .

En Tensorflow.js , se usa la función tf.train.adam() que crea tf.AdamOptimizer que usa el algoritmo adam.

Sintaxis:

tf.train.adam (learningRate?, beta1?, beta2?, epsilon?)

 Parámetros:

  • learningRate: la tasa de aprendizaje que se usará para el algoritmo de descenso de gradiente de Adam. es opcional
  • beta1: La tasa de decaimiento exponencial para las estimaciones del primer momento. es opcional
  • beta2: La tasa de caída exponencial para las estimaciones del segundo momento. es opcional
  • epsilon: Una pequeña constante para la estabilidad numérica. es opcional

 Valor de retorno: AdamOptimizer.

Ejemplo 1: Se define una función cuadrática tomando los tensores de entrada x, y y a, b, c como coeficientes aleatorios. Luego, calculamos la pérdida cuadrática media de la predicción y la pasamos al optimizador de Adam para minimizar la pérdida y cambiar el coeficiente idealmente.

Javascript

// A cubic function with its coeffiecient l,m,n.
const x = tf.tensor1d([0, 1, 2, 3]);
const y = tf.tensor1d([1., 2., 5., 11.]);
 
const l = tf.scalar(Math.random()).variable();
const m = tf.scalar(Math.random()).variable();
const n = tf.scalar(Math.random()).variable();
 
// y = l * x^3 - m * x + n.
const f = x => l.mul(x.pow(3)).sub(m.mul(x)).add(n);
const loss = (pred, label) => pred.sub(label).square().mean();
 
const learningRate = 0.01;
const optimizer = tf.train.adam(learningRate);
 
// Training the model and printing the coefficients.
for (let i = 0; i < 10; i++) {
   optimizer.minimize(() => loss(f(x), y));
  console.log(
     `l: ${l.dataSync()}, m: ${m.dataSync()}, n: ${n.dataSync()}`);
}
 
// Predictions are made.
 
const preds = f(x).dataSync();
preds.forEach((pred, i) => {
   console.log(`x: ${i}, pred: ${pred}`);
});

Producción:

l: 0.5212615132331848, m: 0.4882013201713562, n: 0.9879841804504395
l: 0.5113212466239929, m: 0.49809587001800537, n: 0.9783468246459961
l: 0.5014950633049011, m: 0.5077731013298035, n: 0.969675600528717
l: 0.49185076355934143, m: 0.5170749425888062, n: 0.9630305171012878
l: 0.48247095942497253, m: 0.5257879495620728, n: 0.9595866799354553
l: 0.47345229983329773, m: 0.5336435437202454, n: 0.9596782922744751
l: 0.4649032950401306, m: 0.5403363704681396, n: 0.9626657962799072
l: 0.4569399356842041, m: 0.5455683469772339, n: 0.9677067995071411
l: 0.4496782124042511, m: 0.5491118431091309, n: 0.9741682410240173
l: 0.44322386384010315, m: 0.5508641004562378, n: 0.9816395044326782
x: 0, pred: 0.9816395044326782
x: 1, pred: 0.8739992380142212
x: 2, pred: 3.4257020950317383
x: 3, pred: 11.29609203338623

Ejemplo 2: a continuación se muestra el código donde diseñamos un modelo simple y definimos un optimizador por tf.train.adam con el parámetro de tasa de aprendizaje de 0.01 y lo pasamos a la compilación del modelo.

Javascript

// Importing the tensorflow.js library
import * as tf from "@tensorflow/tfjs"
 
// defining the model
const model = tf.sequential({
    layers: [tf.layers.dense({ units: 1, inputShape: [12] })],
});
   
 
// in the compilation we use tf.train.adam optimizer
  const optimizer = tf.train.adam(0.001);
model.compile({ optimizer: optimizer, loss: "meanSquaredError" },
              (metrics = ["accuracy"]));
   
// evaluate the model which was compiled above
const result = model.evaluate(tf.ones([10, 12]), tf.ones([10, 1]), {
    batchSize: 4,
});
   
// print the result
result.print();

Producción:

Tensor
    1.520470142364502

 Referencia: https://js.tensorflow.org/api/3.6.0/#train.adam

Publicación traducida automáticamente

Artículo escrito por barnadipdey2510 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *