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

时间:2017-10-30 13:55:34

标签: 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(导入中不包含任何convolutional)和
  • 我的函数调用也是特定的keras 2,因为它包含data_format参数应该指向keras 2实现吗?

我在这里缺少什么?我知道here中提到的兼容接口特别注意在keras 2中运行keras 1代码,但是我的(微小)代码中是keras 1吗?

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

那么,我怎么想运行keras 2代码,其次是我在上面的情况中缺少什么?

1 个答案:

答案 0 :(得分: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和{ {1}}新值thchannels_last