无法将Keras中的Lambda Layer直接连接到Flatten Layer而没有例外。为什么?

时间:2016-05-04 19:03:59

标签: python neural-network keras

系统:

  • Keras 1.0.1
  • Theano 0.8.2

我有一个非常简单的功能:

from keras import backend as kback

def ave_embed(xval):
    return kback.mean(xval, axis=1)

我在Keras Lambda图层中使用此图后跟Flatten图层:

model.add(Lambda(ave_embed, output_shape=(d, 1)))
model.add(Flatten())

但是,当我编译模型时,我收到以下错误:

Exception: Input 0 is incompatible with layer flatten_1: expected ndim >= 3, found ndim=2

我通过执行以下操作来修复它:

model.add(Lambda(ave_embed, output_shape=(d, 1)))
model.add(Reshape(d,1))
model.add(Flatten())

任何人都可以解释异常的原因吗?看起来我正在对应该已经是那种形状的输出应用重塑。

1 个答案:

答案 0 :(得分:0)

  

看起来我正在对应该已经是那种形状的输出应用重塑。

你是对的!

如果你有一个3d输入并取第二维的平均值(kback.mean(xval, axis=1)),你的Lambda图层将输出一个2d张量。

要使Lambda图层和Flatten图层组合起作用,您至少应该输入4D。

您只需删除Flatten图层即可使其正常工作。 添加Reshape图层和尺寸会使您的Flatten图层3d的输入张量增加,但会有一个不必要的尺寸,您可以立即展平。