![机器学习实战:模型构建与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/359/44389359/b_44389359.jpg)
上QQ阅读APP看书,第一时间看更新
4.3 使用映射函数进行增强
在第3章中,当使用ImageDataGenerator
为模型提供训练数据时,有一些增强工具可以使用。你可能好奇如何在使用TFDS时达到同样的效果,因为你不再像之前那样从子文件中获取图像。最好的方法是在数据适配器上使用一个映射函数。让我们看一看如何实现。
早期,利用Horses or Humans数据,我们很简单地从TFDS加载数据并为它创建批次,就像这样:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/088-2.jpg?sign=1738835355-8pnEx5LcA5a9j87Kv7PhdynKNzLJvEmG-0-c7e871d5dff48c69de98752e0eb20b07)
为了进行转换并把它们映射到数据集中,你可以创建一个映射函数。这只是标准的Python代码。例如,假设你创建了一个叫作augmentimages
的函数并且让它做一些图像增强,就像这样:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/088-3.jpg?sign=1738835355-biUe0k3UdoBC26uGLYnuzIPY6z803AhD-0-b80560d9223f32d39f5731a3ce5d486c)
接下来将其映射到数据来创建一个新的数据集train
:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/088-4.jpg?sign=1738835355-rOEn3cnWw1iWrGgoY6Jij1tFkwZbstUq-0-6ab456fbf406fc00953a554c187573e0)
创建批时,从train
而不是从data
进行创建:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/088-5.jpg?sign=1738835355-wjGjWo2bhz9kP8s2D6MP68raKYfchZ6y-0-f6c619696eac6942f08ed5f5a9dece57)
你可以看到在augmentimages
函数中有一个随机的向左或向右翻转的图像,通过使用tf.image.random_flip_left_right(image)
实现。tf.image
库中有许多函数可以用来做增强,更多细节请查看文档(https://oreil.ly/H5LZh)。
使用TensorFlow Addons
TensorFlow Addons(https://oreil.ly/iwDv9)库包含更多函数。一些在ImageData-Generator
增强中的函数(例如rotate
)只能在该库中找到。
使用TensorFlow Addons非常简单,只需要使用下面的代码安装库:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/089-1.jpg?sign=1738835355-LCKFT79Kv4kI8brX8heQ9FQ3aQ5ZZYMS-0-a3c0ddddcd01114a9970c66f6699e6c2)
安装完成后,你可以在映射函数中混合这些插件。下例中rotate
插件被用于之前的映射函数中:
![](https://epubservercos.yuewen.com/A03276/23627497809544006/epubprivate/OEBPS/Images/089-2.jpg?sign=1738835355-ZOJxWcyD9hAPtm3RPRVVF2kQF5oe27hR-0-a3eb0e52324f78814d0f2715c23d6134)