我有一个像这样的图像和标签列表(目前在熊猫Dataframe
中)
tag_cat tag_dog tag_house tag_person url
--------------------------------------------------------------------------
True True False False http://example.com/...JPG
False False False True http://example.com/...JPG
这意味着在第一张图片中有一只猫和一只狗。图像未经过预处理。
如何进行?我应该下载所有图像,预处理它们并在本地存储吗?我宁愿避免它,我宁愿下载一些图像,预处理它们并将它们提供给优化。作为替代方案,我更喜欢带有磁盘缓存的混合方案:下载少量图像,预处理它们,将它们提供给优化,另外将图像保存到磁盘,这样如果我重新运行,我就不需要重新运行下载图像。
有什么东西可以帮助我吗?
答案 0 :(得分:3)
当您训练机器学习模型时,通常会训练模型数周期(时期)。换句话说,您必须多次向数值显示所有数据(数百 - 数百)。 从这个角度来看,反复下载图像效率很低。
另一个重点是采用原始图像像素的模型,通常占用大量资源,为了避免瓶颈,并利用您的计算资源,您希望尽可能快地提供数据< / em>到你的机器。下载每批次的图像,再次听起来非常低效。
虽然我觉得它效率很低,如果您仍想在训练期间从网上获取图像,您可以编写一个自定义python生成器来从URL中获取图像,然后使用{{在keras中训练模型3}}方法,其中
使用Python生成器逐批生成的数据使模型适合。
我可以建议的另一个选择是,您可以提取图像功能一次(使用已经训练过的CNN),将它们本地保存在您的文件系统中,并训练更简单的模型。通常这些功能具有非常低的空间占用空间(例如每个图像2048个float32数组),因此您甚至可以将它们存储在您的pandas数据帧中。 查看“使用VGG16提取要素”下的fit_generator(),了解如何提取图像要素的示例
WRT混合缓存方法,它可能是可行的,但我不确定机器学习社区是你应该查询的地方。但无论如何,机器学习本身就有足够的复杂性,可能更好地将精力集中在算法和模型上,而不是智能的可缓存软件管道