我正在尝试运行一个使用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)
convolutional
)和data_format
参数应该指向keras 2实现吗?我在这里缺少什么?我知道here中提到的兼容接口特别注意在keras 2中运行keras 1代码,但是我的(微小)代码中是keras 1吗?
我是python的新手(如果不是很明显),我正在使用pyCharm调试,如果这有所不同。
那么,我怎么想运行keras 2代码,其次是我在上面的情况中缺少什么?
答案 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}}新值th
和channels_last
。