将tf.keras.utils.Sequence与model.fit_生成器一起使用,并使用use_multiprocessing=真生成警告

2024-06-16 11:14:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我得到的警告:

WARNING:tensorflow:multiprocessing can interact badly with TensorFlow, causing nondeterministic deadlocks. For high performance data pipelines tf.data is recommended.

我编写的序列子类严格执行加载和读取I/O jpg文件。我想只要没有两个线程在同一个文件上同时执行,事情就应该正常了

我训练了几次,到目前为止,没有错误。但是如果有什么潜在的不好的事情可能发生,我想得到反馈


Tags: 文件警告datatensorflowwith事情multiprocessingcan
3条回答

最初在TensorFlow 2.0版本中,keras.utils.Sequence出现问题,而multiprocessing=True由于死锁而导致挂起。后来在Tensorflow 2.1中添加了此警告以解决此问题

# use_multiprocessing=False works.
# use_multiprocessing=True hangs in a deadlock situation.
model.fit_generator(generator, use_multiprocessing=True, workers=2)  

您可以忽略此警告,因为您没有执行任何会造成死锁情况的处理

通常,死锁的一个必要条件是,一个进程以独占方式访问一个资源,并且正在等待另一个(source

这意味着,如果Sequence(或生成器)类仅持有对单个资源(例如.jpg映像文件)的访问权,则不会发生死锁。此外,如果您正在从内存中读取数据,并且没有锁定(例如只读数据),则不会发生死锁(由于缺乏独占性)

换句话说:警告可能不适用,除非您正在以线程安全的方式在Sequence或生成器中读取或修改多个数据

我训练了两个具有相同超参数的模型,一个是分类模型,另一个是回归模型。分类模型使用multi_processing=True训练,没有任何警告,而使用mse损失训练回归模型时,它给出警告,缓慢地消耗整个内存,系统挂起。因此,我不得不关闭multi_处理,它消耗了将近50%的系统内存。请注意,尽管分类模型的参数比回归模型多,但两个模型的训练都使用了相同的批量

相关问题 更多 >