gpt4 book ai didi

python - 如何修改ImageDataGenerator中的flow_from_directory或preprocessing_function?

转载 作者:行者123 更新时间:2023-12-02 14:48:56 27 4
gpt4 key购买 nike

根据 keras 文档:

preprocessing_function:将隐含在每个输入上的函数。该函数将在图像调整大小和增强后运行。该函数应采用一个参数:一张图像(等级为 3 的 Numpy 张量),并应输出具有相同形状的 Numpy 张量。

我的 numpy 张量是 5 阶的,因为我的输入图像有 3 个维度(高度、宽度、深度)。

from keras.preprocessing.image import ImageDataGenerator
label_datagen = ImageDataGenerator()

train_label_generator = label_datagen.flow_from_directory(
directory="some_directory",
target_size=(32, 32, 32),
color_mode='grayscale',
class_mode=None,
batch_size=4)

当我检查第一批时,我得到了我的 5D numpy 张量:

first_item = train_image_generator.__getitem__(0)

>>>print('first_item.shape')
(4, 32, 32, 32, 1)

现在我首先想对每个输入图像做一个简单的操作,我还通过打印来检查输入形状:

def some_function(arr):
print(arr.shape)
arr += 1
return arr

在这里,我将这个函数添加到我的 ImageDataGenerator 中:

label_datagen = FixedImageDataGenerator(preprocessing_function=some_function)

这是我得到的输入形状

(32, 32, 1)

这意味着它实际上仅限于排名 3。知道如何修改它以使输入形状为 (32, 32, 32) 吗?

我的目标是对 ImageDataGenerator 中的每个输入使用 to_categorical 函数。我不能简单地说 class_mode="categorical" 因为我正在做语义分割(不是图像分类)。我知道我可以为此目的为生成器编写一些自定义代码,但我想知道是否很难修改 keras ImageDataGenerator。

最佳答案

您可以像往常一样使用 ImageDataGenerator,但在最后一步,不要传递 preprocessing_function,而是将您的生成器包装在您自己的生成器中。通过这样做,您可以完全控制预处理功能。这意味着它的输出不再需要与输入具有相同的形状。请注意,此包装器函数获取的是批量输入,而不是单个图像。

例如:

def preprocess(generator):
for batch in generator:
yield batch[:,1:-1,1:-1] # example: crop 1 px of each border

现在使用 preprocess(label_datagen) 代替。我希望您可以使用它来规避限制。

关于python - 如何修改ImageDataGenerator中的flow_from_directory或preprocessing_function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56972618/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com