ImportError:无法从 keras 导入名称“_obtain_input_shape”

Posted

技术标签:

【中文标题】ImportError:无法从 keras 导入名称“_obtain_input_shape”【英文标题】:ImportError: cannot import name '_obtain_input_shape' from keras 【发布时间】:2018-08-13 06:23:42 【问题描述】:

在 Keras 中,

我正在尝试按如下方式导入_obtain_input_shape

from keras.applications.imagenet_utils import _obtain_input_shape

但是,我收到以下错误:

ImportError: 无法导入名称 '_obtain_input_shape'

我尝试导入_obtain_input_shape的原因是为了确定输入形状(以便加载VGG-Face如下:

我用它来确定输入张量的正确输入形状如下:

input_shape = _obtain_input_shape(input_shape,
                                  default_size=224,
                                  min_size=48,
                                  data_format=K.image_data_format(),
                                  require_flatten=include_top)`

请帮忙? 提前致谢。

【问题讨论】:

可能有更好的方法来做你正在尝试的事情。你到底想用_obtain_input_shape做什么? 嗨@DanielMöller,我已经编辑了我的问题以包含更多信息。 你知道 keras 没有 VGG-Face,对吧?创建模型时,您应该选择输入形状。如果你想要默认的输入形状,只需传递(224,224,3) 感谢丹尼尔的回复,是的,我知道。我想加载 VGG-face 预训练的权重。我会尝试你的建议并让你知道。 有人知道如何为 tensorflow.keras 导入这个吗? 【参考方案1】:

您不必降级 Keras 2.2.2。

Keras 2.2.2keras.applications.imagenet_utils 模块中没有_obtain_input_shape 方法。您可以在 keras-applications 下找到它,模块名称为 keras_applications(下划线)。

因此您不必将 Keras 降级到 2.2.0 只需更改:

from keras.applications.imagenet_utils import _obtain_input_shape

from keras_applications.imagenet_utils import _obtain_input_shape

【讨论】:

这应该被接受为正确答案@Tshilidzi Mudau @Geeocode 知道如何通过 tensorflow.keras 导入它吗? @Austin 请给我一个更具体的问题以便能够回答。 @Geeocode 我可以从 TensorFlow 1.12 导入 _obtain_input_shape 吗?【参考方案2】:

我找到了一种行之有效的方法。您只需使用

from keras_applications.imagenet_utils import _obtain_input_shape 

注意:是keras_applications 而不是keras.application

【讨论】:

我有 keras 2.2.4 并且在建议的更改之后,我也看到了同样的问题。任何帮助,请。 从 keras_applications.imagenet_utils 导入 _obtain_input_shape【参考方案3】:

这个问题是因为keras的版本造成的。

就我而言,我将 keras 2.2.2 降级到 2.2.0,问题就解决了。

【讨论】:

如何将kerns 2.2.2升级到低于2.2.2的版本 使用'pip install keras==2.2.0' @W.Sam 您不必降级 Keras,请参阅下面的答案。【参考方案4】:

在 Colab 中,我通过导入 Keras 并安装解决了这个问题:

import keras
!pip install keras_applications
from keras_applications.imagenet_utils import _obtain_input_shape

【讨论】:

【参考方案5】:

keras_applications.imagenet_utils 已弃用

Traceback(最近一次调用最后一次): 文件“inception_v3.py”,第 36 行,在 从 keras_applications.imagenet_utils 导入 _obtain_input_shape ModuleNotFoundError:没有名为“keras_application”的模块

【讨论】:

【参考方案6】:
from keras.applications.imagenet_utils import obtain_input_shape

不是 _obtain_input_shape。这适用于 keras==2.5.0rc0 (pip install keras==2.5.0rc0)

【讨论】:

【参考方案7】:

对于 keras 2.2.4: 更改如下所示的行以使其工作。

from keras_applications.imagenet_utils import _obtain_input_shape

注意:它是从 keras_applications 导入的,而不是像以前那样从 keras.applications 导入。

【讨论】:

以上是关于ImportError:无法从 keras 导入名称“_obtain_input_shape”的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow.keras.layers:ImportError:无法导入名称“CuDNNLSTM”

Keras - ImportError:无法导入名称'CuDNNLSTM'

无法导入TensorFlow和Keras

ImportError:无法导入名称“model_to_dot”

ImportError: 无法导入 pydot。您必须安装 pydot 和 graphviz 才能使 `pydotprint` 工作

ImportError:无法从“flask”导入名称“request”