- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据 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/
背景 我发现很多代码示例,人们使用 rescale=1./255 预处理图像数据,或者使用 preprocessing_function 设置它到它们在 ImageDataGenerator 中使用的
我是一名优秀的程序员,十分优秀!