使用Theano后端的Keras Flatten()层行为不一致

时间:2019-05-02 17:15:56

标签: python keras theano keras-layer

我试图了解后端为Keras的{​​{1}}中Theano层的行为。我在两个不同的Keras环境中安装了两个不同的Conda版本。在这两个版本中,使用Flatten()展开4D张量的方式有所不同,我对哪个是正确的感到非常困惑。

我写了以下两个代码片段来显示问题:

enter image description here

上面的代码首先沿channels轴展平输入矩阵

但是,在另一个版本中,结果却不同:

enter image description here

上面的代码首先将columns轴上的输入矩阵展平。

有人可以解释一下吗?谢谢!

1 个答案:

答案 0 :(得分:1)

两个都是正确的。差异是由于image_data_format设置。可以在keras.json中或通过后端API进行设置。

https://keras.io/backend/

>>> from keras import backend as K
>>> K.image_data_format()
'channels_first'

当格​​式为“ channels_first”时,输出为

array([[ 0.,  9., 18., 27.,  1., 10., 19., 28.,  2., 11., 20., 29.,  3.,
        12., 21., 30.,  4., 13., 22., 31.,  5., 14., 23., 32.,  6., 15.,
        24., 33.,  7., 16., 25., 34.,  8., 17., 26., 35.]], dtype=float32)

当格​​式为“ channels_last”时,输出为

array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
        13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25.,
        26., 27., 28., 29., 30., 31., 32., 33., 34., 35.]], dtype=float32)