如何在keras fit_generator()中定义max_queue_size,worker和use_multiprocessing?
我正在使用GPU版本的keras在经过预训练的网络上应用转移学习。我不知道如何来定义参数 max_queue_size
,
workers
和 use_multiprocessing
。如果我更改这些参数(主要是为了加快学习速度),则不确定是否每个时期仍能看到所有数据。
max_queue_size
:
-
内部训练队列的最大大小,用于“预缓存”生成器中的样本
-
问题: 这是否指的是在CPU上准备多少批次?有什么关系
workers
?如何最佳定义?
workers
:
-
并行生成批处理的线程数。批处理在CPU上并行计算,然后即时传递到GPU进行神经网络计算
-
问题: 如何找出我的CPU可以/应该并行生成多少个批次?
use_multiprocessing
:
-
是否使用基于进程的线程
-
问题: 如果更改,是否必须将此参数设置为true
workers
?它与CPU使用率有关吗?
相关问题 可以在这里找到:
我使用fit_generator()
如下:
history = model.fit_generator(generator=trainGenerator,
steps_per_epoch=trainGenerator.samples//nBatches, # total number of steps (batches of samples)
epochs=nEpochs, # number of epochs to train the model
verbose=2, # verbosity mode. 0 = silent, 1 = progress bar, 2 = one line per epoch
callbacks=callback, # keras.callbacks.Callback instances to apply during training
validation_data=valGenerator, # generator or tuple on which to evaluate the loss and any model metrics at the end of each epoch
validation_steps=
valGenerator.samples//nBatches, # number of steps (batches of samples) to yield from validation_data generator before stopping at the end of every epoch
class_weight=classWeights, # optional dictionary mapping class indices (integers) to a weight (float) value, used for weighting the loss function
max_queue_size=10, # maximum size for the generator queue
workers=1, # maximum number of processes to spin up when using process-based threading
use_multiprocessing=False, # whether to use process-based threading
shuffle=True, # whether to shuffle the order of the batches at the beginning of each epoch
initial_epoch=0)
我的机器的规格是:
CPU : 2xXeon E5-2260 2.6 GHz
Cores: 10
Graphic card: Titan X, Maxwell, GM200
RAM: 128 GB
HDD: 4TB
SSD: 512 GB
-
Q_0:
问题:这是否指的是在CPU上准备多少批次?它与工人有什么关系?如何最佳定义?
从发布的链接中,您可以了解到CPU一直在创建批处理,直到队列达到最大队列大小或到达停止为止。您需要准备好批处理以供GPU“使用”,以使GPU不必等待CPU。队列大小的理想值是使其足够大,以使您的GPU始终在接近最大值的情况下运行,而不必等待CPU准备新批处理。
Q_1:
问题:如何找出我的CPU可以/应该并行生成多少个批次?
如果您发现您的GPU处于空闲状态并正在等待批处理,请尝试增加工作人员数量,也许还增加队列大小。
Q_2:
如果更改工作人员,是否必须将此参数设置为true?它与CPU使用率有关吗?
这是将其设置为
True
或时发生的情况的实用分析False
。这里是一个建议,将其设置为False
防止冻结(在我的设置True
工作正常不结冰)。也许其他人可以增进我们对该主题的理解。综上所述:
尝试不进行顺序设置,尝试使CPU为GPU提供足够的数据。
另外:您可以(应该?)在下一次提出几个问题,以便于回答。