如何选择model.predict_generator和flow_from_dataframe的参数

How to choose parameters of model.predict_generator and flow_from_dataframe

我正在使用预训练的 VGG16 模型在 Google Colab 的 TPU 上对约 100 000 张图像进行分类。我不确定为不同的参数选择什么值来优化 Keras 的 model.predict_generatorflow_from_dataframe 的运行时间。似乎没有很多文档。我尝试使用 'only' ~10 000 张图像来改变测试运行中的队列大小和工作人员数量,但我没有观察到运行时有任何重大变化。

下面提供了一个代码片段。 pandas 数据框包含已安装驱动器上所有图像的文件位置,以及地面实况标签。该模型是现有的 VGG16 预训练网络。 (我想稍后将此网络的性能与我自己的网络进行比较。)非常欢迎在 (batch size, queue size, workers) 时使用什么设置的最佳实践的一些见解!

trdata= ImageDataGenerator()
data = trdata.flow_from_dataframe(dataframe = df, directory= None, 
      x_col="Photo", y_col="Class", class_mode='categorical', color_mode="rgb", 
      batch_size=32, target_size=(224,224), shuffle=False)
predictions= model.predict_generator(data, max_queue_size=64, workers = 32, verbose=1)

batch_size: 训练模型的准确性取决于batch_size。因此,您应该 select batch_size 为您的特定数据提供最佳结果。就性能而言,更高的 batch_size 会消耗更多的内存并提供较小的速度提升。

max_queue_size:
max_queue_size 是用于缓存来自生成器的样本的最大队列大小。
CPU 不断创建批次,直到队列位于 max_queue_size 或到达停止点。您希望为您的 GPU 准备好批次“接受”,这样 GPU 就不必等待 CPU.

工人:
它是并行生成批处理的线程数。批次在 CPU 上并行计算,并即时传递到 GPU 以进行神经网络计算 如果您发现您的 GPU 正在等待批处理,请尝试增加工作人员的数量,或许还可以增加队列大小。

也可以参考.

如果您想检查 GPU 的性能,可以使用 Tensorboard Profiler。有关演示示例,请参阅 here