不能在Keras的ImageDataGenerator中使用preprocess_input作为preprocessing_function

时间:2018-05-26 22:07:49

标签: python keras

当尝试提供从CNN包导入的preprocess_input时(例如keras.applications.resnet),模型在尝试适应生成的数据时会引发错误:

  

'JpegImageFile'对象不可订阅

代码:

datagen = ImageDataGenerator(preprocessing_function=preprocess_input)

Keras版本:2.1.5

2 个答案:

答案 0 :(得分:2)

通过将Keras降级为2.1.4修复此问题:

pip uninstall keras
pip install keras==2.1.4

或者通过使用Lambda图层添加预处理作为模型的第一步:

model.add(keras.layers.Lambda(preprocess_input, name='preprocessing', input_shape=(224, 224, 3)))

答案 1 :(得分:2)

如果问题仅由使用预处理引起(并且您仍然可以在没有预处理的情况下使用ImageDataGenerator),那么您还可以创建包装生成器:

def wrapperGenerator(dataGenerator, preprocess):
    while True:
        x, y = next(dataGenerator)
        x = preprocess(x)
        yield(x,y)