我需要将图像分类为 2000 个类别之一。
我正在使用 Nvidia DIGITS + caffe (GoogLeNet) 并为每个类提供 10K 样本(因此有高达 2000 万张图像,~1Tb 数据!)。但是数据准备(“创建数据库”)任务本身估计为 102 天,如果该估计是正确的,我不禁想到实际的训练时间会是多少。
应对这一挑战的最佳方法是什么?我应该将数据集分解为 3-4 个模型吗?并分别使用它们?使用较小的数据集并降低准确性的风险?别的东西?
感谢您帮助新手。
我需要将图像分类为 2000 个类别之一。
我正在使用 Nvidia DIGITS + caffe (GoogLeNet) 并为每个类提供 10K 样本(因此有高达 2000 万张图像,~1Tb 数据!)。但是数据准备(“创建数据库”)任务本身估计为 102 天,如果该估计是正确的,我不禁想到实际的训练时间会是多少。
应对这一挑战的最佳方法是什么?我应该将数据集分解为 3-4 个模型吗?并分别使用它们?使用较小的数据集并降低准确性的风险?别的东西?
感谢您帮助新手。
你得到了训练数据!!这是整个过程中最具挑战性的部分,不要放弃!
尝试将数据创建任务分解为多个步骤,并将它们并行化。训练需要很长时间(取决于您的 GPU),但您应该耐心等待。
我认为您可以使用 ImageDataLayer 而不是 LMDB 或 levelDB。
首先,你需要知道你应该使用LMDB/LevelDB什么场景,你能得到什么好处(尤其是并行训练。)但是你会遇到的事情是创建LMDB又大又慢,你还需要使用SSD而不是 HDD以减少耗时的问题。
其次,当你只需要用小数据集(例如<2M图像)训练CNN时,你可以像@kli_nlpr所说的那样使用ImageDataLayer 。
最后,就像@Shai 所说,所有过程中最大的挑战始终是准备数据,并检查训练结果是否符合您的预期,如果不是,您应该检查数据,再次准备数据或检查训练配置。如果您尝试了所有可能的解决方案,但您仍然觉得速度很慢,您可以尝试将您的硬件更改为GPU 集群。