python加载数据集_计算机视觉20:Python机器学习库Keras加载超过内存的图片数据集...

在计算机视觉的模型训练过程中,有时候需要加载几十个G的图片数据集用于模型训练。这种情况下,无法直接一次性将图片训练数据集全部加载到内存中,否则会报内存溢出的错误。该如何处理呢?别急,本文将教你使用Python机器学习库Keras解决该问题。

上述问题的答案就是:使用机器学习库Keras中的ImageDataGenerator类自动加载训练、测试和验证数据集。此外,该生成器能够实现逐步加载数据集中的图像,这样你就可以逐步处理超大型图像数据集了。

本文将会讲解如何逐步加载超大型图像数据集以及使用超大型图像数据集来训练深度学习模型。

b8389b504fc2d5626e4b0026e8dc37eb74c66c88.jpeg?token=61d1b0d8755ae8490d08248d48ed2918&s=6794E42381CA7CEB5474C1CE0000C0B2

大型数据集的目录结构

为了能够更方便Keras模型训练,可以把大型数据集分为训练数据、测试数据和验证数据。将上述三类数据集放置于合适的目录下,并按照一定的命名规则来储存。

本文的大型数据集目录结构如下:

91ef76c6a7efce1b53bff419a09c54dab68f659a.png?token=174f0a3bccc5c5bb3b61241899bd30f2&s=81A89D1A13524C61427DACDA030090B2

train目录下存放训练数据集,其中的red子目录存放红色颜色的车图片,blue子目录存放蓝色颜色的车图片;

test目录下存放测试数据集,其中的red子目录存放红色颜色的车图片,blue子目录存放蓝色颜色的车图片;

validation目录下存放验证数据集,其中的red子目录存放红色颜色的车图片,blue子目录存放蓝色颜色的车图片;

使用Keras加载大型图像训练数据集

如果让你来加载大型数据集,你可能会实现一套完整的代码来手动加载图像数据,并返回训练数据。具体步骤为:遍历数据集的目录结构、逐步加载图像数据、返回训练数据和图像类别,然后不断循环这个过程直到加载完所有的图片。

但幸运的是,我们不需要这么麻烦,Keras提供的ImageDataGenerator类已经帮我们实现了这个功能。这个类允许批量加载单个数据集的图像,这意味着它可以用于加载小数据集,也可以加载超大型图像数据集。

它的原理是:并非将所有图像加载到内存中,而是只加载当前或接下来可能需要用到的几个小批次图片,用于模型训练和评估。可以将这个过程称为渐进式加载,因为数据集是从文件中逐步加载的。

另外,ImageDataGenerator类的其他二个强大的功能是,支持缩放和增强图像。这些内容已在前面的文章中介绍过,这里不再讨论。本文只专注于如何使用ImageDataGenerator类从文件加载大型图像数据。

使用ImageDataGenerator类的步骤如下:

构造ImageDataGenerator类的实例。通过调用flow_from_directory函数从迭代器获取数据。使用迭代器训练或评估模型。具体代码如下:

738b4710b912c8fc8d1a0613f3ce3541d4882150.png?token=2d8a0317fbf891fc8979c5f850502ad7&s=3820AC1AC5304C23164418D2030080B2

该代码首先创建ImageDataGenerator实例。接下来,创建三个迭代器,每个迭代器用于训练数据集、验证数据集和测试数据集。这个过程终端将能够看到调试消息,打印出加载的图像个数和类别个数。最后,从train迭代器中获取第一批图像,并打印这批图像的相关参数。

小结

通过阅读本文,你应该学会了:

如何将训练、测试和验证数据集按照有效的目录结构存储。如何使用ImageDataGenerator类逐步加载超大型图像数据集。如何使用ImageDataGenerator类加载数据集目录。

6159252dd42a28343a428cfd54786eee17cebfb5.jpeg?token=44697306d68917373a694afd5aac1c42&s=00B14D327CB0E69A82C1B5480300B0B1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值