python - Keras 2 代码正在执行 keras 1 兼容代码

标签 python keras

我正在尝试运行一个使用 keras/tensorflow 的示例。我正在使用 Keras 2.0.8。 当我写下这段简单的代码时:

from keras.layers import ZeroPadding2D
pad = ZeroPadding2D(padding=(1, 1), data_format=None)

并尝试调试 ZeroPadding2D 我被定向到一个名为 convolutional.py 的文件,其中包含 @interfaces.legacy_zeropadding2d_support 语句。我有点迷路了,但我认为这是 keras 1 的兼容性代码。 我检查了 ZeroPadding2D 的 keras 1 和 2 定义:

# keras 1
keras.layers.convolutional.ZeroPadding2D(padding=(1, 1), dim_ordering='default') 

# keras 2
keras.layers.ZeroPadding2D(padding=(1, 1), data_format=None)
  • 因为我的导入明确引用了 keras 2(导入中不包含任何卷积)和
  • 我的函数调用也是 keras 2 特定的,因为它包含 data_format 参数,我应该被定向到 keras 2 实现吗?

我在这里错过了什么?我知道在 here 中提到的兼容性接口(interface) 需要特别注意。用于在 keras 2 中运行 keras 1 代码,但我的(小)代码中有一些东西是 keras 1 吗?

我是 python 的新手(如果不是很明显的话),如果这有所不同,我正在使用 pyCharm 进行调试。

那么,我应该如何只运行 keras 2 代码,其次我在上述情况下缺少什么?

最佳答案

您的代码是 Keras 2,一切正常。

虽然您从 keras.layers 导入层,但在内部它是从 keras.layers.convolutional 导入的。你可以检查keras 2.0.8代码,layers folder中没有ZeroPadding2D .它只能在 convolutional.py 中找到。 __init__ 文件负责自动导入其他文件中的图层。

现在,@interfaces.legacy... 行被称为“装饰器”,它为它出现的方法添加了一些额外的功能。它位于真正的 keras 2 代码之上,用于处理用户尝试输入 keras 1 参数的可能性。

你看到的代码是keras 2。你可以看看legacy.interface看看这个装饰器添加了什么。

它增加了使用旧的 dim_ordering 而不是 data_format 的可能性,并且它从 dim_ordering 的旧值进行了适当的转换,其中 tfth 为新值,channels_lastchannels_first

关于python - Keras 2 代码正在执行 keras 1 兼容代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017035/

相关文章:

python - 如何在不包含父目录的情况下在 Python/tar 中创建 tar.gz 存档?

python - 使用 NumPy 和 PyQt4 重复显示随机噪声图像

javascript - JS与Python的RSA加解密(pycrypto)

python - 强制执行抽象方法实现是 unpythonic 的吗?

python-2.7 - 为什么我没有 keras.applications 模块?

python - 模型错误 : Layer model_1 expects 1 input(s), 但它收到了 2 个输入张量

python - 如何在 python 中为 chrome 的 webdriver 设置代理

python - 尝试拟合模型 python 时出现断言错误

python - keras load_weights() 无法加载权重

tensorflow - Tensorflow 2 中使用 tf.data.Dataset.from_generator 的 keras 模型的多个输入