keras - lambda 层中的 load_model 错误为 "function=preprocess_input"(Keras)

标签 keras keras-layer keras-2

keras 2.1.5/TF 后端

我尝试使用 lambda 层进行图像预处理(通过函数)

型号:

from keras.applications.resnet50 import preprocess_input

base_model = keras.applications.resnet50.ResNet50(include_top=False, input_shape=(224, 224, 3))

model = Sequential()
model.add(Lambda(preprocess_input, name='Input_Image', input_shape=(224, 224, 3))
model.add(base_model)
model.add(GlobalAveragePooling2D())
model.add(Dense(len(classes), activation="softmax"))

我用“custom_objects”调用了 load_model

from keras.models import load_model
model = load_model(h5_weights, custom_objects={'preprocess_input': preprocess_input})

但随后出现错误

File "/usr/local/lib/python2.7/dist-packages/keras/layers/core.py", line 663, in call
return self.function(inputs, **arguments)
File "/usr/local/lib/python2.7/dist-packages/keras/applications/imagenet_utils.py", line 177, in preprocess_input
return _preprocess_symbolic_input(x, data_format=data_format,
NameError: global name '_preprocess_symbolic_input' is not defined

未定义的函数:

_preprocess_symbolic_input

File "/usr/local/lib/python2.7/dist-packages/keras/applications/imagenet_utils.py"

有什么建议吗?

最佳答案

_preprocess_symbolic_input 也放入 custom_objects 中。

custom_objects = {
    'preprocess_input': preprocess_input,
    '_preprocess_symbolic_input': keras.applications.imagenet_utils._preprocess_symbolic_input
}
model = load_model(h5_weights, custom_objects=custom_objects)

关于keras - lambda 层中的 load_model 错误为 "function=preprocess_input"(Keras),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49568797/

相关文章:

python - 在keras中将输入与常量向量连接起来

python - keras 有状态 LSTM

tensorflow - Tensorflow 中的回调

json - 使用keras在json中转储cnn的权重

machine-learning - 向 Keras 中 Flatten() 层的输出添加新功能

keras - 在卷积层后添加 Dense

tensorflow - 如何卡住 keras 或 tf.keras 中的选定权重?

python - 有没有办法在 tf.keras 中保存指定时期的模型?

tensorflow - Dropout 层在测试/训练阶段的行为

tensorflow - 在 Keras 2 中获取每一层的梯度