在keras 2.2.4中imagenet_utils.preprocess_input方法存在错误吗?还是仅我一个人?

时间:2019-01-17 10:25:53

标签: python keras

尝试使用keras提供的imagenet_utils.preprocess_input(x)方法,并引发错误:

File "C:\Dev\workspace\venvs\venv36\lib\site-packages\keras_applications\imagenet_utils.py", line 186, in preprocess_input
data_format = backend.image_data_format()
AttributeError: 'NoneType' object has no attribute 'image_data_format'

我发现了这篇文章(Keras : Create MobileNet_V2 model "AttributeError"),两者之间是否有联系?

我正在使用Python 3.6,Keras 2.2.4和Tensorflow后端1.12运行此脚本

我正在尝试使用已经预训练的模型,尤其是VGG16模型,并复制了在多个博客中找到的代码示例。 例如此处:https://blog.keras.io/building-a-simple-keras-deep-learning-rest-api.html

代码从imagenet_utils.preprocess_input方法引发异常,因为此基础代码为:

backend, _, _, _ = get_submodules_from_kwargs(kwargs)

返回后端=无,因此代码无法继续执行...

这就是为什么我在调用方法以查看是否为None之前打印后端。似乎某处将其替换为“无”?

import keras
import numpy as np
from keras.applications import VGG16
from keras_applications import imagenet_utils
from keras_preprocessing.image import load_img, img_to_array


if __name__ == '__main__':
    model = VGG16(weights="imagenet")
    print("backend: {}".format(keras.backend.image_data_format()))

    img = load_img('./images/whatever.jpg', target_size=(224, 224))
    x = img_to_array(img)
    x = np.expand_dims(x, axis=0)

    print("backend: {}".format(keras.backend.image_data_format()))

    # Seems there is this bug to solve in 2.2.4
    x = imagenet_utils.preprocess_input(x)  # Will throw an error 'AttributeError: 'NoneType' object has no attribute 'image_data_format''
    predictions = model.predict(x)
    top_preds = imagenet_utils.decode_predictions(predictions)

    print(top_preds)

我应该向Keras团队提出问题吗? 我想念什么吗?

1 个答案:

答案 0 :(得分:0)

如果有些人遇到相同的问题,我终于找到了“错误”所在。 读完this github issue与我的极为相似之后,我更改了导入内容:

  • 从keras_applications导入VGG16现在变为从keras.applications导入VGG16

  • 从keras_applications导入imagenet_utils的
  • 现在从keras.applications导入imagenet_utils