📌  相关文章
📜  Tensorflow.js tf.LayersModel 类 .evaluateDataset() 方法

📅  最后修改于: 2022-05-13 01:56:33.458000             🧑  作者: Mango

Tensorflow.js tf.LayersModel 类 .evaluateDataset() 方法

Tensorflow.js 是一个由谷歌开发的开源库,用于在浏览器或节点环境中运行机器学习模型以及深度学习神经网络。

.evaluateDataset()函数用于通过指定的数据集对象评估指定的模型。

注意:此方法与 evaluate() 不同,因为它是异步的。

句法:

evaluateDataset(dataset, args?)

参数:

  • 数据集:指定的数据集对象。等待其 iterator() 方法以生成数据集迭代器对象,等待其 next() 方法生成用于评估的数据批次。此外,next() 调用的返回值必须包含一个布尔完成字段和一个值字段。其中 value 字段可能是两个 tf.Tensor 的数组,或者是两个嵌套的 tf.Tensor 构建的数组。第一种情况适用于只有一个输入和一个输出的模型,即顺序模型。后一种情况有利于模型以及几个输入和/或几个输出。在数组中的两个元素中,第一个是输入特征,第二个是输出目标。它是 tf.data.Dataset 类型。
  • args:声明的配置对象,支持基于数据集的评估。它是可选的并且是对象类型。以下论点属于它:
    1. 批次:在终止评估之前要从给定数据集对象中拖动的指定批次数量。它是数字类型。
    2. 详细:规定的详细模式。它是ModelLoggingVerbosity类型。

返回值:返回 tf.Scalar 或 tf.Scalar[] 的 promise。

示例 1:

Javascript
// Importing the tensorflow.js library
import * as tf from "@tensorflow/tfjs"
  
// Defining an array x
const Array_x = [
   [1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1],
];
  
// Defining an array y
const Array_y = [1, 1, 1, 1];
  
// Defining dataset of x
const Dataset_x = tf.data.array(Array_x);
  
// Defining dataset of y
const Dataset_y = tf.data.array(Array_y);
  
// Defining dataset of xy using zip method
const Dataset_xy = tf.data.zip({xs: Dataset_x, ys: Dataset_y})
     .batch(5)
     .shuffle(3);
  
// Defining model
const mymodel = tf.sequential({
   layers: [tf.layers.dense({units: 1, inputShape: [8]})]
});
  
// Compiling model
mymodel.compile({optimizer: 'sgd', loss: 'meanSquaredError'});
  
// Calling evaluateDataset() method
const res = await mymodel.evaluateDataset(Dataset_xy, 
tf.ones([7, 10]), tf.ones([7, 1]), {
   batchSize: 5,
});
  
// Printing output
res.print();


Javascript
// Importing the tensorflow.js library
import * as tf from "@tensorflow/tfjs"
  
// Defining dataset of xy using zip method
const Dataset_xy = tf.data.zip({
    xs: tf.data.array([[1, 0, 1, 2, 1]]), 
    ys: tf.data.array([1, 2, 1, 3])})
    .batch(8);
  
// Defining model
const mymodel = tf.sequential({
   layers: [tf.layers.dense(
      {units: 1, inputShape: [5], activation: 'sigmoid'})
   ]
});
  
// Compiling model
mymodel.compile({optimizer: 'sgd', loss: 'meanSquaredError'});
  
// Calling evaluateDataset() method
const res = await mymodel.evaluateDataset(
    Dataset_xy, tf.truncatedNormal([7, 10]), 
        tf.randomNormal([7, 1]), 
        {batchSize: 2, steps: 1}
    );
  
// Printing output
console.log(JSON.stringify(res));


输出:

Tensor
    0.9196577668190002

示例 2:

Javascript

// Importing the tensorflow.js library
import * as tf from "@tensorflow/tfjs"
  
// Defining dataset of xy using zip method
const Dataset_xy = tf.data.zip({
    xs: tf.data.array([[1, 0, 1, 2, 1]]), 
    ys: tf.data.array([1, 2, 1, 3])})
    .batch(8);
  
// Defining model
const mymodel = tf.sequential({
   layers: [tf.layers.dense(
      {units: 1, inputShape: [5], activation: 'sigmoid'})
   ]
});
  
// Compiling model
mymodel.compile({optimizer: 'sgd', loss: 'meanSquaredError'});
  
// Calling evaluateDataset() method
const res = await mymodel.evaluateDataset(
    Dataset_xy, tf.truncatedNormal([7, 10]), 
        tf.randomNormal([7, 1]), 
        {batchSize: 2, steps: 1}
    );
  
// Printing output
console.log(JSON.stringify(res));

输出:

{"kept":false,"isDisposedInternal":false,"shape":[],"dtype":"float32",
"size":1,"strides":[],"dataId":{"id":6923},"id":4594,
"rankType":"0","scopeId":4223}

参考: https://js.tensorflow.org/api/latest/#tf.LayersModel.evaluateDataset