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

问题描述

我正在使用预先训练的VGG16模型在Google Colab的TPU上分类约100000张图像。我不确定为不同的参数选择什么值以优化Keras的model.predict_generatorflow_from_dataframe的运行时间。似乎没有很多文档。我尝试通过“仅”〜10000张图像来改变队列大小和工作量,但是在运行时中没有发现任何重大变化。

下面提供了一个代码段。熊猫数据框包含已安装驱动器上所有图像的文件位置以及地面真相标签。该模型是现有的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,它可以为您的特定数据提供最佳结果。就性能而言,较高的batch_size将占用更多内存,并会带来较小的速度提升。

max_queue_size:
max_queue_size是最大大小的队列,用于缓存生成器中的样本。
CPU会继续创建批处理,直到队列达到max_queue_size或到达停止位置为止。您希望为GPU“准备好”准备好批处理,以便GPU不必等待CPU。

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

您也可以参考this

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...