我正在尝试运行一个使用 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
的旧值进行了适当的转换,其中 tf
和 th
为新值,channels_last
和 channels_first
。
关于python - Keras 2 代码正在执行 keras 1 兼容代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017035/