我正在研究用于图像分类的卷积神经网络。训练数据集太大而无法加载到我的计算机内存(4gb)上,除此之外,我还需要尝试一些增强来平衡类。
我正在使用keras
. 我研究了很多例子,但我还没有找到解决问题的方法。我正在考虑model.fit
通过传递一个执行“批处理”的函数或生成器来替换调用的参数。我将设计此功能以从磁盘导入并应用扩充。
我不知道如何实现。有什么建议?
我正在研究用于图像分类的卷积神经网络。训练数据集太大而无法加载到我的计算机内存(4gb)上,除此之外,我还需要尝试一些增强来平衡类。
我正在使用keras
. 我研究了很多例子,但我还没有找到解决问题的方法。我正在考虑model.fit
通过传递一个执行“批处理”的函数或生成器来替换调用的参数。我将设计此功能以从磁盘导入并应用扩充。
我不知道如何实现。有什么建议?
当您正在处理图像分类并且还希望实现一些数据增强时,您可以将两者结合起来并使用强大的“ImageDataGenerator”类直接从文件夹加载批次。
看看优秀的文档!
我不会从该链接复制和粘贴示例,但我可以概述您所经历的步骤:
创建生成器类: data_gen = ImageDataGenerator()
如果您希望它为您执行动态增强,可以在创建类时指定: data_gen = ImageDataGenerator(samplewise_center=True, ...)
如果您使用需要有关数据集的一些统计信息的增强过程,例如feature_wise归一化(不是 sample-wise),您必须通过向生成器显示一些数据来准备生成器data_gen.fit(training_data)
:这种fit
方法只是简单地预先计算平均值和标准差等东西,稍后用于标准化。
生成器进入模型的fit_generator
方法,我们调用flow_from_directory
生成器的方法:
model.fit_generator(training_data=data_gen.flow_from_directory('/path/to/folder/'), ...)
您还可以使用 ImageDataGenerator 为您的验证数据创建一个单独的生成器,然后您不应该在其中应用扩充,以便在真实数据上完成验证测试,为您提供模型性能的准确图片。
无论如何,理论上这些生成器将永远运行,从您的文件夹中生成批次。因此,我建议使用 Keras 的回调函数在满足特定条件时停止。请参阅EarlyStopping 类的文档。您也可以手动执行此操作,但 Keras 让它变得非常简单!
如果您想要细粒度的控制,您可以手动执行上述所有操作,从磁盘为单个批次加载足够的样本,执行一些扩充,然后运行该model.train_on_batch()
方法。如果您想深入了解细节,最好先学习 Keras 的方式,然后根据需要结合 Tensorflow 进行自己的详细模型。两者可以很好地搭配使用!