Python 在tensorflow2中使用自定义数据生成器进行多线程处理
我一直在keras的tensorflow 1中使用一个自定义数据生成器Python 在tensorflow2中使用自定义数据生成器进行多线程处理,python,multithreading,tensorflow,data-generation,tensorflow2,Python,Multithreading,Tensorflow,Data Generation,Tensorflow2,我一直在keras的tensorflow 1中使用一个自定义数据生成器 model.fit_generator(generator=training_generator, validation_data=validation_generator, use_multiprocessing=True, epochs=epochs, workers=workers, callbac
model.fit_generator(generator=training_generator,
validation_data=validation_generator,
use_multiprocessing=True, epochs=epochs,
workers=workers, callbacks=callbacks_list, verbose=2)
效果很好。现在,当我切换到tensorflow2时,我发现不再支持多gpu模型(model)
正如文档中所建议的,我切换到tf.distribute.MirroredStrategy(),因为我运行的是一台带有4个GPU的无头服务器。我还将生成器(“training_generator”)切换为tf.data.Dataset格式:
train_ds = tf.data.Dataset.from_generator(lambda: training_generator,
output_types=((tf.float32, tf.float32, tf.float32, tf.float32), tf.float32),
output_shapes=(([None, 224, 224, 3],
[None, 625],
[None, 224, 224, 3],
[None, 224, 224, 3]),
[None, 2])
)
但是如何让它运行多个线程呢?以下是我尝试过的(都是从这里开始的:):
train\u dataset=train\u ds.map(lambda x,y:(x,y),num\u parallel\u calls=workers)
generators=tf.data.Dataset.from_tensor_切片(['Gen_0','Gen_1','Gen_2','Gen_3','Gen_4','Gen_5','Gen_6','Gen_7','Gen Gen_8','Gen Gen u9','Gen u10'])
`
这会很好地加载CPU和GPU,但似乎会创建数据集的副本。我只想在整个数据集中运行一次,像在model.fit_generator()中一样并行生成批
任何帮助或见解都将不胜感激 您可能还需要在映射中“预取”数据集。train_dataset=train_ds.map(lambda x,y:(x,y),num_parallel_calls=workers)。预取(buffer_size=1000)您可能还需要在映射中“预取”数据集。train\u数据集=train\u ds.map(lambda x,y:(x,y),num\u parallel\u calls=workers)。预取(缓冲区大小=1000)
train_dataset = generators.interleave(lambda x: tf.data.Dataset.from_generator(lambda: training_generator,
output_types=((tf.float32, tf.float32, tf.float32, tf.float32), tf.float32),
output_shapes=(([None, 224, 224, 3],
[None, 625],
[None, 224, 224, 3],
[None, 224, 224, 3]),
[None, 2])
),
num_parallel_calls=tf.data.experimental.AUTOTUNE)