当尝试提供从CNN包导入的preprocess_input时(例如keras.applications.resnet),模型在尝试适应生成的数据时会引发错误:
'JpegImageFile'对象不可订阅
代码:
datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
Keras版本:2.1.5
答案 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)