【发布时间】:2018-03-24 22:44:11
【问题描述】:
我正在为这个迁移学习个人项目开发一个特征提取器,而 Kera 的 VGG16 模型的预测功能似乎很慢(一批 4 张图像需要 31 秒)。我确实预计它会很慢,但不确定预测函数是否比它应该的慢。
data = DataGenerator()
data = data.from_csv(csv_path=csv_file,
img_dir=img_folder,
batch_size=batch)
#####################################################
conv_base = VGG16(include_top=False,
weights='imagenet',
input_shape=(480, 640, 3))
model = Sequential()
model.add(conv_base)
model.add(MaxPooling2D(pool_size=(3, 4)))
model.add(Flatten())
######################################################
for inputs, y in data:
feature_batch = model.predict(inputs)
yield feature_batch, y
所以,我的直觉是它很慢,原因如下:
- 我的输入数据有点大(加载 (480, 640, 3) 大小的图像)
- 我在较弱的 CPU (M3-6Y30 @ 0.90GHz) 上运行
- 我在特征提取器的末尾有一个展平操作。
我尝试过的事情:
- 其他 StackOverFlow 帖子建议将最大池层添加到 减小特征尺寸/去除多余的零。我让我 考虑一个相当大的最大池窗口(从而减少特征大小 显着,但我的预测时间增加了。
- 批处理不会缩短时间,这可能是显而易见的 使用我的 M3 CPU)。一张图片的批量大小需要 8 秒,一个 批量大小为 4 需要 32。
关于如何加快预测功能有什么想法吗?我需要运行至少 10,000 张图像,并且由于项目的性质,我希望尽可能多地保留在进入模型之前尽可能的原始数据(将与其他特征提取模型进行比较)
我所有的图像文件都保存在本地,但我可以尝试设置云计算机并将我的代码移到那里以在 GPU 支持下运行。
问题仅仅是我在极小的 CPU 上运行 VGG16 模型吗?
非常感谢您的指导。
【问题讨论】:
-
0.9GHz 非常非常非常弱
标签: python performance machine-learning keras