Tensorflow 如何在tf.dataset中获取每个历元的步骤数?

Tensorflow 如何在tf.dataset中获取每个历元的步骤数?,tensorflow,keras,Tensorflow,Keras,我很好奇如何在tf.keras中设置适合在tf.dataset?上进行训练的步长?。因为我需要大量的例子来计算它,我想知道我是怎么得到这个的 由于它是tf.data类型,您可以假设这更容易。如果我将“每历元步长”设置为“无”,则得到“未知” 为什么使用tf.data会让生活变得如此复杂?试试tf.data.experiative.cardinality: dataset = tf.data.Dataset.range(42) print(tf.data.experimental.cardinal

我很好奇如何在tf.keras中设置适合在tf.dataset?上进行训练的步长?。因为我需要大量的例子来计算它,我想知道我是怎么得到这个的

由于它是tf.data类型,您可以假设这更容易。如果我将“每历元步长”设置为“无”,则得到“未知”


为什么使用tf.data会让生活变得如此复杂?

试试
tf.data.experiative.cardinality

dataset = tf.data.Dataset.range(42)
print(tf.data.experimental.cardinality(dataset).numpy())

42

尝试
tf.data.experimental.cardinality

dataset = tf.data.Dataset.range(42)
print(tf.data.experimental.cardinality(dataset).numpy())

42

前面的答案不错,但我想指出两件事:

  • 下面的代码可以工作,不再需要使用实验包
  • 如果使用
    过滤器
    谓词,基数可能返回值-2,因此未知;如果确实在数据集上使用筛选谓词,请确保在对数据集应用
    .from\u tensor\u slices()
    之前,已以其他方式计算了数据集的长度(例如,熊猫数据帧的长度)
  • 另一个要点是如何设置参数
    steps\u per\u epoch
    validation\u steps
    steps\u per\u epoch==length\u of_training\u dataset//batch\u size,validation\u steps==length\u of_of_validation\u dataset//batch\u size


    这里有一个完整的例子:

    前面的答案很好,但我想指出两个问题:

  • 下面的代码可以工作,不再需要使用实验包
  • 如果使用
    过滤器
    谓词,基数可能会返回值-2,因此未知;如果在数据集上使用过滤器谓词,请确保已以其他方式计算数据集的长度(例如,在应用
    之前,从_tensor_slices()
    计算数据帧的长度)
  • 另一个要点是如何设置参数
    steps\u per\u epoch
    validation\u steps
    steps\u per\u epoch==length\u of_training\u dataset//batch\u size,validation\u steps==length\u of_of_validation\u dataset//batch\u size


    这里有一个完整的例子:

    谢谢!但我真的很困惑。我在数据集之后使用repeat(2)(实际上我不知道这是什么作用)。我现在如何设置每个历元的步长以获取每个历元中的所有数据?我现在是否设置步长计数为previus值的两倍,因为repeat(2)?!Steps\u per\u epoch==length\u of_training\u dataset//batch\u size,validation\u Steps==length\u of_validation\u dataset//batch\u sizeI get-2。我的数据集是FlatMapDataset类型。我告诉过你这可能发生。然后你需要在长度之前进行某种计算。在某种程度上,我理解它返回-2的原因,因为当你展平时,你不知道有多少个元素你得到的数据。确保在避免任何问题之前计算长度。为了我的理解,使用普通tf.dataset而不重复只需在每个历元的最大值上遍历整个数据一次?因此我需要repeat()并将每个历元的步骤设置为所有批次数?谢谢!但我真的很困惑。我使用repeat(2)在数据集之后(实际上我真的不知道这是做什么的)。我现在如何设置每个历元的步长以获取每个历元中的所有数据?我现在是否设置步长计数为previus值的两倍,因为重复(2)?!Steps\u per\u epoch==length\u of_training\u dataset//batch\u size,validation\u Steps==length\u of_validation\u dataset//batch\u sizeI get-2。我的数据集是FlatMapDataset类型。我告诉过你这可能发生。然后你需要在长度之前进行某种计算。在某种程度上,我理解它返回-2的原因,因为当你展平时,你不知道有多少个元素得到的数据。请确保在计算长度之前避免出现任何问题。据我所知,不重复使用plain tf.dataset只需在每个历元的最大值上遍历整个数据一次?因此我需要repeat()并将每个历元的步骤设置为所有批次数?