系统:
我有一个非常简单的功能:
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())
任何人都可以解释异常的原因吗?看起来我正在对应该已经是那种形状的输出应用重塑。
答案 0 :(得分:0)
看起来我正在对应该已经是那种形状的输出应用重塑。
你是对的!
如果你有一个3d输入并取第二维的平均值(kback.mean(xval, axis=1)
),你的Lambda
图层将输出一个2d张量。
要使Lambda
图层和Flatten
图层组合起作用,您至少应该输入4D。
您只需删除Flatten
图层即可使其正常工作。
添加Reshape
图层和尺寸会使您的Flatten
图层3d的输入张量增加,但会有一个不必要的尺寸,您可以立即展平。