Tensorflow 使用kerasapi,我如何批量导入图像,在给定的批次中每个ID的实例正好有K个?

Tensorflow 使用kerasapi,我如何批量导入图像,在给定的批次中每个ID的实例正好有K个?,tensorflow,keras,deep-learning,file-import,Tensorflow,Keras,Deep Learning,File Import,我正在尝试实现批量硬三重态丢失,如第3.2节所示 我需要导入我的图像,以便每个批次在特定批次中每个ID都有K个实例。因此,每个批次必须是K的倍数 我有一个图像目录太大,无法放入内存,因此我正在使用ImageDataGenerator.flow\u from\u directory()导入图像,但我看不到此函数的任何参数以允许我需要的功能 如何使用Keras实现此批处理行为?从Tensorflow 2.4开始,我看不到使用ImageDataGenerator实现此操作的标准方法 因此,我认为您需要

我正在尝试实现批量硬三重态丢失,如第3.2节所示

我需要导入我的图像,以便每个批次在特定批次中每个ID都有K个实例。因此,每个批次必须是K的倍数

我有一个图像目录太大,无法放入内存,因此我正在使用
ImageDataGenerator.flow\u from\u directory()
导入图像,但我看不到此函数的任何参数以允许我需要的功能


如何使用Keras实现此批处理行为?

从Tensorflow 2.4开始,我看不到使用
ImageDataGenerator实现此操作的标准方法

因此,我认为您需要基于
tensorflow.keras.utils.Sequence
类编写自己的批处理内容,这样您就可以自己定义批处理内容了

参考文献:


您可以尝试以受控方式将多个数据流合并在一起

假设您有K个负责提供特定ID的训练实例的
tf.data.Dataset
(不管您如何实例化它们),您可以将它们连接起来,以便在小批量中获得均匀分布:

ds1 = ...  # Training instances with ID == 1
ds2 = ...  # Training instances with ID == 2
...
dsK = ... # Training instances with ID == K



train_dataset = tf.data.Dataset.zip((ds1, ds2, ..., dsK)).flat_map(concat_datasets).batch(batch_size=N * K)

其中,
concat\u数据集
是合并功能:

def concat_datasets(*datasets):
    ds = tf.data.Dataset.from_tensors(datasets[0])
    for i in range(1, len(datasets)):
        ds = ds.concatenate(tf.data.Dataset.from_tensors(datasets[i]))
    return ds