python - 如何使用 ImageDataGenerator 类生成训练和标签作为 keras 模型的图像?
问题描述
我想训练一个模型来使用 Keras 生成新图像,我会使用 ImageDataGenerator 类来生成批量图像。
问题是我找不到使用此类生成训练和标签批次作为图像的方法。我想将模型作为训练一些图像和一些其他图像的标签传递给模型。
此外,我需要从硬盘驱动器读取每批图像,因为数据集太大而无法加载到内存中。
也可以欣赏 ImageDataGenerator 方法的替代方法。
我希望这个问题很清楚,你可以帮助我。
解决方案
您可以将ImageDataGenerator
类与您喜欢的任何类型的标签一起使用,也可以使用图像,它们只是多维数组。这是一个使用虚拟 numpy 图像的示例:
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
# Create fake images
n, width, height = 1000, 28, 28
images_data = np.random.randint(low=0, high=256, size=(n, height, width, 3))
images_labels = np.random.randint(low=0, high=256, size=(n, height, width, 3))
image_gen = ImageDataGenerator()
batch_size = 100
batch_gen = image_gen.flow(images_data, images_labels, batch_size=batch_size)
然后,您可以传递batch_gen
给fit_generator
,例如,它将产生 的元组(images_data, images_labels)
,两者都具有 shape (batch_size, height, width, 3)
。您可以通过以下方式检查:
batch = batch_gen.next()
print(len(batch))
print(batch[0].shape)
print(batch[1].shape)
如果您的数据集不适合内存并存储为文件,您也可以使用flow_from_directory
. Keras 官方文档中有示例。
如果您编写自己的批处理生成器函数,您还可以在生成批处理之前对它们执行一些操作:
def _generate_batches(image_gen, images_data, images_labels, batch_size):
for batch in image_gen.flow(images_data, images_labels,
batch_size=batch_size):
# Here you can do whatever you like to your batch
yield (batch[0], batch[1])
最后,如果您需要非常具体的功能ImageDataGenerator
,您可以随时构建您的自定义ImageDataGenerator
类:
class ImageDataGeneratorCustom(ImageDataGenerator):
...
特别是,您可能想要覆盖该flow()
函数,甚至构建一个自定义Iterator
.
推荐阅读
- php - WordPress:在 PHP 变量中获取标题标签
- python - Python BeautifulSoup 'Slice' 对象没有属性 'lower'
- dynamics-crm - 如何使用自定义字段更新注释实体的值?
- angular - 如何将模板表达式语法与代码混合
- php - 如何在树枝中委托?
- r - R图线性拟合子集
- python-3.x - 迭代添加的最有效数据类型?
- javascript - 如何比较两个数字一是相同输入的输入值和属性值?
- mysql - MySql 查询速度慢 1000 倍,LIMIT 稍高(不是偏移量)
- android - BLE:如何在扫描结果之间准确找到我的设备?