📜  Tensorflow.js tf.Sequential 类 .evaluateDataset() 方法

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

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

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

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

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

句法:

evaluateDataset(dataset, args?)

参数:

  • 数据集:指定的数据集对象。等待其 iterator() 方法以生成数据集迭代器对象,等待其next () 方法生成用于评估的数据批次。此外, next () 调用的返回值必须包含一个布尔型done字段以及一个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);
  
// Training Model 
const gfg = tf.sequential();
    
// Adding layer to model  
const layer = tf.layers.dense({units:1, 
               inputShape : [8]});
   gfg.add(layer);
      
// Compiling our model 
const config = {optimizer:'sgd', 
              loss:'meanSquaredError'};
  gfg.compile(config);
  
// Calling evaluateDataset() method
const res = await gfg.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);
  
// Training Model 
const gfg = tf.sequential();
    
// Adding layer to model  
const layer = tf.layers.dense({units:1, 
    inputShape : [5], activation: 'sigmoid'});
  
gfg.add(layer);
      
// Compiling our model 
const config = {optimizer:'sgd', 
              loss:'meanSquaredError'};
  
gfg.compile(config);
  
// Calling evaluateDataset() method
const res = await gfg.evaluateDataset(
    Dataset_xy, tf.truncatedNormal([7, 10]), 
    tf.randomNormal([7, 1]), 
    {batchSize: 2, steps: 1});
  
// Printing output
console.log(JSON.stringify(res));


输出:

Tensor
    2.9478049278259277

示例 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);
  
// Training Model 
const gfg = tf.sequential();
    
// Adding layer to model  
const layer = tf.layers.dense({units:1, 
    inputShape : [5], activation: 'sigmoid'});
  
gfg.add(layer);
      
// Compiling our model 
const config = {optimizer:'sgd', 
              loss:'meanSquaredError'};
  
gfg.compile(config);
  
// Calling evaluateDataset() method
const res = await gfg.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":7097},
"id":4731,"rankType":"0","scopeId":4352}

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