【问题标题】:How to choose parameters of model.predict_generator and flow_from_dataframe如何选择model.predict_generator和flow_from_dataframe的参数
【发布时间】:2020-12-20 22:17:45
【问题描述】:

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

下面提供了一个代码 sn-p。 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)

【问题讨论】:

  • 您到底想达到什么目的?您不确定哪些参数?
  • 我正在使用神经网络对图像进行分类。 predictions 是一个矩阵,其中包含每个类的概率。 (我后来用它来计算基于真实标签的 topk 准确度。)现在代码可以运行,但速度很慢。我知道这仍然是一项繁重的计算任务,但我想充分利用硬件并最大限度地减少运行时间。为此,可能有一些聪明的方法来选择 batch_size、max_queue_size 和工人数量。 (也许还有其他我没有考虑过的参数?)我想要一些关于如何选择这些的建议。

标签: python tensorflow keras deep-learning image-recognition


【解决方案1】:

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

ma​​x_queue_size:
max_queue_size 是用于缓存来自生成器的样本的最大队列大小。
CPU 不断创建批次,直到队列达到 max_queue_size 或达到停止。您希望为 GPU 准备好批处理,以便 GPU 不必等待 CPU。

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

您也可以参考this

如果您想检查 GPU 的性能,可以使用 Tensorboard Profiler。演示示例见here

【讨论】:

  • 这回答了你的问题吗?
  • 谢谢!我主要是在寻找数量级来选择数字,但我想这是一个非常艰难的选择,因为它取决于很多事情。变量名称已经很清楚了,但是您的解释确实提供了一些额外的清晰度/确认(以及稍后我自己训练神经网络时的一些很好的指示)。张量板分析器似乎是一个我还没有找到的非常有用的工具,谢谢你的链接,我一定会去看看!
猜你喜欢
  • 1970-01-01
  • 2016-10-30
  • 2021-01-31
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多