提问者:小点点

如何在kerasfit_generator中定义max_queue_size、工人和use_multiprocessing?


我正在使用keras的GPU版本在预训练的网络上应用迁移学习。我不明白如何定义参数max_queue_size工人use_multiprocessing。如果我改变这些参数(主要是为了加快学习),我不确定是否所有的数据仍然是每个时代看到的。

max_queue_size

>

问:这是指在CPU上准备了多少批次吗?和工作者有什么关系?如何优化定义?

工人

>

  • 并行生成批处理的线程数。批次在CPU上并行计算,并动态传递到GPU进行神经网络计算

    问:我如何找出我的CPU可以/应该并行生成多少批次?

    使用多处理

    >

    问题:如果我更改辅助角色,是否必须将此参数设置为true?它与CPU使用有关吗?

    相关问题可在此处找到:

    >

  • 模型的详细说明。fit_generator()参数:队列大小、工作线程和使用多处理
  • Keras的fit_发电机中的工人是什么意思?

    “model.fit_generator”中使用的参数“max_q_size”是什么?

    关于如何将数据生成器与Keras一起使用的详细示例。

    我使用的是fit\u 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
    

  • 共1个答案

    匿名用户

    Q_0:

    问题:这是否指CPU上准备了多少批?它与工人有什么关系?如何对其进行最佳定义?

    从您发布的链接中,您可以了解到CPU一直在创建批,直到队列达到最大队列大小或停止。您希望为GPU“获取”批处理做好准备,以便GPU不必等待CPU。队列大小的理想值是使其足够大,使GPU始终在接近最大值的位置运行,而不必等待CPU准备新的批处理。

    问题1:

    问:我如何找出我的CPU可以/应该并行生成多少批次?

    如果您看到GPU处于空闲状态并等待批处理,请尝试增加工作量,也许还可以增加队列大小。

    Q_2:

    如果我更改工人,是否必须将此参数设置为true?它与CPU使用有关吗?

    下面是对将其设置为TrueFalse时发生的情况的实际分析。建议将其设置为False以防止冻结(在我的设置中True无需冻结即可正常工作)。也许其他人可以增加我们对这个话题的理解。

    还有:你可以(应该?)下次提出几个问题,以便更容易回答。