如何从 Keras 中的深度学习目录加载大型数据集

这篇具有很好参考价值的文章主要介绍了如何从 Keras 中的深度学习目录加载大型数据集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、说明

        数据集读取,使用、在磁盘上存储和构建图像数据集有一些约定,以便在训练和评估深度学习模型时能够快速高效地加载。本文介绍Keras 深度学习库中的ImageDataGenerator类等工具自动加载训练、测试和验证数据集。

二、ImageDataGenerator加载数据集

        您可以使用Keras 深度学习库中的ImageDataGenerator类等工具自动加载训练、测试和验证数据集。此外,生成器将逐步加载数据集中的图像,使您可以处理包含数千或数百万张可能无法放入系统内存的图像的小型和非常大的数据集。

        在本教程中,您将了解如何构建图像数据集以及如何在拟合和评估深度学习模型时逐步加载它。

        完成本教程后,您将了解:

  • 如何将训练、测试和验证图像数据集组织成一致的目录结构。
  • 如何使用ImageDataGenerator类逐步加载给定数据集的图像。
  • 如何使用准备好的数据生成器通过深度学习模型进行训练、评估和预测。

        使用我的新书《计算机视觉深度学习》来启动您的项目,其中包括分步教程和所有示例的Python 源代码文件。让我们开始吧。

三、教程概述

        本教程分为三个部分;他们是:

  1. 数据集目录结构
  2. 数据集结构示例
  3. 如何逐步加载图像

四、数据集目录结构

        有一种标准方法可以布置用于建模的图像数据。

        收集图像后,必须首先按数据集对它们进行排序,例如训练、测试和验证,然后按类别对它们进行排序。

        例如,想象一个图像分类问题,我们希望根据汽车的颜色对照片进行分类,例如红色汽车、蓝色汽车等。

        首先,我们有一个data/目录,我们将在其中存储所有图像数据。

        接下来,我们将有一个用于训练数据集的data/train/目录和一个用于保留测试数据集的data/test/目录。在训练期间,我们还可能有用于验证数据集的数据/验证/ 。

        到目前为止,我们已经:

1
2
3
4
data/
data/train/
data/test/
data/validation/

        在每个数据集目录下,我们都会有子目录,每个类都有一个子目录,其中将放置实际的图像文件。

        例如,如果我们有一个将汽车照片分类为红色汽车或蓝色汽车的二元分类任务,则我们将有两个类“红色”和“蓝色”,因此每个数据集目录下有两个类目录。

        例如:

1
2
3
4
5
6
7
8
9
10
data/
data/train/
data/train/red/
data/train/blue/
data/test/
data/test/red/
data/test/blue/
data/validation/
data/validation/red/
data/validation/blue/

        然后红色汽车的图像将被放置在适当的类目录中。

例如:

1
2
3
4
5
6
7
8
data/train/red/car01.jpg
data/train/red/car02.jpg
data/train/red/car03.jpg
...
data/train/blue/car01.jpg
data/train/blue/car02.jpg
data/train/blue/car03.jpg
...

        请记住,我们不会将相同的文件放在red/blue/目录下;相反,分别有红色汽车和蓝色汽车的不同照片。

        另请记住,我们在训练测试验证数据集中需要不同的照片。

        用于实际图像的文件名通常并不重要,因为我们将加载具有给定文件扩展名的所有图像。

        如果您能够一致地重命名文件,一个好的命名约定是使用某个名称,后跟一个填充零的数字,例如image0001.jpg(如果您有数千个类的图​​像)。

五、示例数据集结构

        我们可以通过一个例子使图像数据集结构具体化。

        想象一下,我们正在对汽车照片进行分类,正如我们在上一节中讨论的那样。具体来说,就是红色汽车和蓝色汽车的二元分类问题。

        我们必须创建上一节中概述的目录结构,具体来说:

1
2
3
4
5
6
7
8
9
10
data/
data/train/
data/train/red/
data/train/blue/
data/test/
data/test/red/
data/test/blue/
data/validation/
data/validation/red/
data/validation/blue/

        让我们实际创建这些目录。

        我们还可以将一些照片放在目录中。

        您可以使用知识共享图像搜索来查找一些具有宽松许可的图像,您可以下载这些图像并将其用于此示例。

        我将使用两张图片:

  • 丹尼斯·贾维斯 (Dennis Jarvis) 的《红色汽车》。
  • 蓝色汽车,比尔·史密斯 (Bill Smith) 着。

如何从 Keras 中的深度学习目录加载大型数据集,深度学习,人工智能,深度学习,keras,人工智能

丹尼斯·贾维斯 (Dennis Jarvis) 的《红色汽车》

如何从 Keras 中的深度学习目录加载大型数据集,深度学习,人工智能,深度学习,keras,人工智能

蓝色汽车,比尔·史密斯 (Bill Smith)

        将照片下载到您当前的工作目录,并将红色汽车的照片保存为“red_car_01.jpg”,将蓝色汽车的照片保存为“blue_car_01.jpg”。

        对于每个训练、测试和验证数据集,我们必须有不同的照片。

        为了保持本教程的重点,我们将在三个数据集中的每一个数据集中重复使用相同的图像文件,但假装它们是不同的照片。

        将“red_car_01.jpg”文件的副本放在 data/train/red/data/test/red/ 和 data/validation/red/ 目录中。

        现在,将“blue_car_01.jpg”文件的副本放在 data/train/blue/data/test/blue/ 和 data/validation/blue/ 目录中。

        现在,我们有一个非常基本的数据集布局,如下所示(tree 命令的输出):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data
├── test
│   ├── blue
│   │   └── blue_car_01.jpg
│   └── red
│       └── red_car_01.jpg
├── train
│   ├── blue
│   │   └── blue_car_01.jpg
│   └── red
│       └── red_car_01.jpg
└── validation
    ├── blue
    │   └── blue_car_01.jpg
    └── red
        └── red_car_01.jpg

        下面是目录结构的屏幕截图,取自 macOS 上的 Finder 窗口。

如何从 Keras 中的深度学习目录加载大型数据集,深度学习,人工智能,深度学习,keras,人工智能

图像数据集目录和文件结构的屏幕截图

        现在我们有了基本的目录结构,让我们练习从文件加载图像数据以用于建模。

六、如何逐步加载图像

        可以编写代码来手动加载图像数据并返回准备建模的数据。

        这将包括遍历数据集的目录结构、加载图像数据以及返回输入(像素数组)和输出(类整数)。

        值得庆幸的是,我们不需要编写此代码。相反,我们可以使用 Keras 提供的 ImageDataGenerator 类。

        使用此类加载数据的主要好处是,将批量加载单个数据集的图像,这意味着它既可用于加载小型数据集,也可用于加载具有数千或数百万个图像的超大型图像数据集。

        在训练和评估深度学习模型时,它不会将所有图像加载到内存中,而是将刚好足够的图像加载到内存中,以供当前甚至接下来的几个小批量使用。我将其称为渐进式加载,因为数据集是从文件中渐进式加载的,只需检索足够的数据即可立即使用。

        使用 ImageDataGenerator 类的另一个好处是,它还可以自动缩放图像的像素值,并且可以自动生成图像的增强版本。我们将把这些主题留到另一个教程中讨论,而是专注于如何使用 ImageDataGenerator 类从文件加载图像数据。

        使用 ImageDataGenerator 类的模式如下所示:

  1. 构造和配置 ImageDataGenerator 类的实例。
  2. 通过调用 flow_from_directory() 函数检索迭代器。
  3. 在模型的训练或评估中使用迭代器。

        让我们仔细看看每个步骤。

        ImageDataGenerator 的构造函数包含许多参数,用于指定如何在加载图像数据后对其进行操作,包括像素缩放和数据增强。在此阶段,我们不需要任何这些功能,因此配置 ImageDataGenerator 很容易。

1
2
3
...
# create a data generator
datagen = ImageDataGenerator()

        接下来,需要一个迭代器来逐步加载单个数据集的图像。

        这需要调用 flow_from_directory() 函数并指定数据集目录,例如训练测试验证目录。

        该功能还允许您配置与图像加载相关的更多详细信息。值得注意的是“target_size”参数,它允许您将所有图像加载到特定大小,这在建模时通常需要。该函数默认为大小为 (256, 256) 的方形图像。

        该函数还允许您通过“class_mode”参数指定分类任务的类型,特别是它是“二进制”还是“分类”的多类分类。

        默认的“batch_size”是 32,这意味着在训练时,每批都会返回 32 张从数据集中各个类中随机选择的图像。可能需要更大或更小的批次。在评估模型时,您可能还希望以确定性顺序返回批次,这可以通过将“shuffle”设置为“False”来实现。

        还有许多其他选项,我鼓励您查看 API 文档。

        我们可以使用相同的 ImageDataGenerator 为单独的数据集目录准备单独的迭代器。如果我们希望将相同的像素缩放应用于多个数据集(例如 trian、test 等),这将非常有用。

1
2
3
4
5
6
7
...
# load and iterate training dataset
train_it = datagen.flow_from_directory('data/train/', class_mode='binary', batch_size=64)
# load and iterate validation dataset
val_it = datagen.flow_from_directory('data/validation/', class_mode='binary', batch_size=64)
# load and iterate test dataset
test_it = datagen.flow_from_directory('data/test/', class_mode='binary', batch_size=64)

        准备好迭代器后,我们可以在拟合和评估深度学习模型时使用它们。

        例如,可以通过在模型上调用 fit_generator() 函数并传递训练迭代器 (train_it) 来实现使用数据生成器拟合模型。通过“validation_data”参数调用此函数时,可以指定验证迭代器 (val_it)。

        必须为训练迭代器指定“steps_per_epoch”参数,以便定义定义单个纪元的图像批次。

        例如,如果训练数据集中有 1,000 张图像(跨所有类),并且批处理大小为 64,则steps_per_epoch约为 16 或 1000/64。

        同样,如果应用了验证迭代器,则还必须指定“validation_steps”参数,以指示定义一个纪元的验证数据集中的批次数。

1
2
3
4
5
...
# define model
model = ...
# fit model
model.fit_generator(train_it, steps_per_epoch=16, validation_data=val_it, validation_steps=8)

        模型拟合后,可以使用 evaluate_generator() 函数在测试数据集上对其进行评估,并传入测试迭代器 (test_it)。“steps”参数定义在停止之前评估模型时要逐步执行的样本批次数。

1
2
3
...
# evaluate model
loss = model.evaluate_generator(test_it, steps=24)

        最后,如果你想使用拟合模型对一个非常大的数据集进行预测,你也可以为该数据集创建一个迭代器(例如predict_it),并在模型上调用 predict_generator() 函数。

1
2
3
...
# make a prediction
yhat = model.predict_generator(predict_it, steps=24)

        让我们使用上一节中定义的小型数据集来演示如何定义 ImageDataGenerator 实例并准备数据集迭代器。

        下面列出了一个完整的示例。

1
2
3
4
5
6
7
8
9
10
11
# example of progressively loading images from file
from keras.preprocessing.image import ImageDataGenerator
# create generator
datagen = ImageDataGenerator()
# prepare an iterators for each dataset
train_it = datagen.flow_from_directory('data/train/', class_mode='binary')
val_it = datagen.flow_from_directory('data/validation/', class_mode='binary')
test_it = datagen.flow_from_directory('data/test/', class_mode='binary')
# confirm the iterator works
batchX, batchy = train_it.next()
print('Batch shape=%s, min=%.3f, max=%.3f' % (batchX.shape, batchX.min(), batchX.max()))

        运行该示例首先使用所有默认配置创建 ImageDataGenerator 的实例。

        接下来,创建三个迭代器,分别用于训练、验证和测试二进制分类数据集。创建每个迭代器时,我们可以看到调试消息,其中报告了发现和准备的映像和类的数量。

        最后,我们测试了用于拟合模型的训练迭代器。检索到第一批图像,我们可以确认该批次包含两个图像,因为只有两个图像可用。我们还可以确认图像被加载并强制到 256 行和 256 列像素的正方形尺寸,并且像素数据没有缩放并保持在 [0, 255] 范围内。

1
2
3
4
Found 2 images belonging to 2 classes.
Found 2 images belonging to 2 classes.
Found 2 images belonging to 2 classes.
Batch shape=(2, 256, 256, 3), min=0.000, max=255.000

七、总结

        在本教程中,您了解了如何构建图像数据集,以及如何在拟合和评估深度学习模型时逐步加载图像数据集。

        具体而言,您了解了:

  • 如何将训练、测试和验证图像数据集组织到一致的目录结构中。
  • 如何使用 ImageDataGenerator 类逐步加载给定数据集的图像。
  • 如何使用准备好的数据生成器通过深度学习模型进行训练、评估和预测。

        你有什么问题吗?请在下面的评论中提出您的问题,我会尽力回答。文章来源地址https://www.toymoban.com/news/detail-782816.html

到了这里,关于如何从 Keras 中的深度学习目录加载大型数据集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)

    本项目依赖于Keras深度学习模型,旨在对手语进行分类和实时识别。为了实现这一目标,项目结合了OpenCV库的相关算法,用于捕捉手部的位置,从而能够对视频流和图像中的手语进行实时识别。 首先,项目使用OpenCV库中的算法来捕捉视频流或图像中的手部位置。这可以涉及到

    2024年02月07日
    浏览(43)
  • 基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(一)

    本项目依赖于Keras深度学习模型,旨在对手语进行分类和实时识别。为了实现这一目标,项目结合了OpenCV库的相关算法,用于捕捉手部的位置,从而能够对视频流和图像中的手语进行实时识别。 首先,项目使用OpenCV库中的算法来捕捉视频流或图像中的手部位置。这可以涉及到

    2024年02月07日
    浏览(44)
  • 深度学习(5)--Keras实战

    目录 一.Keras基础概念 二.如何跑通Keras项目 2.1.在cmd上跑通 2.2.在PyCharm上跑通 Keras是深度学习中的一个神经网络框架,是一个高级神经网络API,用Python编写,可以在TensorFlow,CNTK或Theano之上运行。 Keras优点: (1). 允许简单快速的原型设计(用户友好性,模块化和可扩展性)。

    2024年01月25日
    浏览(54)
  • 【python】keras包:深度学习

    Win+R ,输入指令: pip install tensorflow pip install keras 推荐镜像: -i https://pypi.tuna.tsinghua.edu.cn/simple/ keras包相当于是 tensflow 包的前端 tensflow包相当于是keras包的后端 keras包用来写深度学习更方便 官方链接:https://keras.io/zh/ 官方网站:下载连接 共包含4个文件:训练集、训练集标签

    2024年02月02日
    浏览(39)
  • Keras深度学习实战(41)——语音识别

    语音识别( Automatic Speech Recognition , ASR ,或称语音转录文本)使声音变得\\\"可读\\\",让计算机能够\\\"听懂\\\"人类的语言并做出相应的操作,是人工智能实现人机交互的关键技术之一。在《图像字幕生成》一节中,我们已经学习了如何将手写文本图像转录为文本,在本节中,我们将利用

    2024年02月04日
    浏览(45)
  • 【python】keras包:深度学习(序章)

    Win+R ,输入指令: pip install tensorflow pip install keras 推荐镜像: -i https://pypi.tuna.tsinghua.edu.cn/simple/ keras包相当于是 tensflow 包的前端 tensflow包相当于是keras包的后端 keras包用来写深度学习更方便 官方链接:https://keras.io/zh/ 官方网站:下载连接 共包含4个文件:训练集、训练集标签

    2024年02月03日
    浏览(49)
  • 深度学习使用Keras进行多分类

    之前的文章介绍了使用Keras解决二分类问题。那么对于多分类问题该怎么解决?本文介绍利用深度学习----Keras进行多分类。 为了演示,本次选用了博文keras系列︱图像多分类训练与利用bottleneck features进行微调(三)中提到的数据集,原始的数据集将所有类别的train照片放到t

    2024年02月07日
    浏览(39)
  • 【深度学习】实验10 使用Keras完成逻辑回归

    Keras是一个开源的深度学习框架,能够高效地实现神经网络和深度学习模型。它由纽约大学的Francois Chollet开发,旨在提供一个简单易用的高层次API,以便开发人员能够快速搭建模型,从而节省时间和精力。Keras能够兼容各种底层深度学习框架,如TensorFlow、Theano和CNTK等。它已经

    2024年02月07日
    浏览(37)
  • Keras-深度学习-神经网络-人脸识别模型

    目录 模型搭建 模型训练 ①导入所需的库,导入了 Keras 和其他必要的库,用于构建和处理图像数据。 ②加载人脸数据并进行处理,并将其划分为训练集和测试集。每个人的图像按顺序排列,训练集包含每个人前6张图像,测试集包含剩余的图像。每个图像都被转换为像素值列

    2024年02月12日
    浏览(55)
  • TensorFlow 2 和 Keras 高级深度学习:6~10

    原文:Advanced Deep Learning with TensorFlow 2 and Keras 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则 2.3.c 正如我们已经探索的那样,GAN 可以通

    2023年04月18日
    浏览(99)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包