📌  相关文章
📜  Tensorflow.js tf.data.Dataset 类(1)

📅  最后修改于: 2023-12-03 14:47:54.815000             🧑  作者: Mango

TensorFlow.js tf.data.Dataset 类

TensorFlow.js中的tf.data.Dataset类是一个强大的工具,用于处理和管理数据集。它使我们能够以一种清晰、可重复和可扩展的方式处理大量数据,特别是在训练机器学习模型时。

Dataset类的创建
从一个Tensor创建

我们可以通过将一个Tensor转换为一个Dataset对象轻松创建一个数据集。此外,我们还可以提供一个可选的标签张量来与数据张量一起使用。

const data = tf.tensor2d([[0, 1], [2, 3], [4, 5], [6, 7]]);
const labels = tf.tensor1d([0, 1, 2, 3]);
const dataset = tf.data.array(data).zip(tf.data.array(labels));
从内存数组创建

我们可以使用tf.data.array函数从内存数组创建一个数据集。此外,我们还可以像上面一样提供可选的标签数组来与数据数组一起使用。

const data = [0, 1, 2, 3, 4, 5, 6, 7];
const labels = [0, 1, 2, 3];
const dataset = tf.data.array(data).zip(tf.data.array(labels));
使用可迭代对象创建

我们还可以使用可迭代对象(如数组)来创建一个数据集。这使得我们可以轻松地从文件系统中读取数据。

async function* dataGenerator() {
  const filenames = await fetchFilenames();
  for (let i = 0; i < filenames.length; i++) {
    const data = await fetchData(filenames[i]);
    const label = await fetchLabel(filenames[i]);
    yield { data, label };
  }
}

const dataset = tf.data.generator(dataGenerator)
              .map(item => {
                return { data: tf.tensor(item.data), label: tf.tensor(item.label) };
              });
转变数据集

我们可以通过多种方式来转换数据集。下面列出了一些最常用的。

Map

在使用数据集时,经常需要将所有数据传递给一个函数进行转换或处理。Map操作可以应用一个函数并返回一个新的数据集。

const dataset = tf.data.array([0, 1, 2, 3])
                .map(x => x * 2);

await dataset.forEachAsync(x => console.log(x)); // 0, 2, 4, 6

Filter

Filter函数可以根据某些条件过滤掉一些不必要的数据,从而提高数据集的效率。

const dataset = tf.data.array([0, 1, 2, 3])
                .filter(x => x % 2 === 0);

await dataset.forEachAsync(x => console.log(x)); // 0, 2

Batch

Batch函数可以将数据集分批处理,节省内存并提高效率。

const dataset = tf.data.array([0, 1, 2, 3])
                .batch(2);

await dataset.forEachAsync(x => console.log(x)); // [0, 1], [2, 3]
遍历数据集

我们可以使用forEachAsync等函数轻松地遍历所有数据集元素,并将其提供给回调函数。

const dataset = tf.data.array([0, 1, 2, 3]);

await dataset.forEachAsync(x => console.log(x)); // 0, 1, 2, 3
总结

TensorFlow.js提供了一个方便的工具来处理和管理数据集。在使用数据集时,我们可以使用各种转换操作来转换数据集。此外,我们还可以使用各种函数来遍历数据集。