Keras 输入0与层gru_13不兼容:预期ndim=3,发现ndim=2

Keras 输入0与层gru_13不兼容:预期ndim=3,发现ndim=2,keras,Keras,我想将3CNN与3GRU层一起使用。以下是体系结构: layer\u a=Input(shape=(120,),dtype='float32',name='main') 图层b=输入(形状=(9,),数据类型='float32',名称='site') layer_c=Input(shape=(4,),dtype='float32',name='access') 模型=模型(输入=[层a、层b、层c],输出=[层f]) compile(优化器='adam',loss=smape\u错误) 但是,

我想将
3CNN
3GRU
层一起使用。以下是体系结构:

layer\u a=Input(shape=(120,),dtype='float32',name='main')
图层b=输入(形状=(9,),数据类型='float32',名称='site')
layer_c=Input(shape=(4,),dtype='float32',name='access')
模型=模型(输入=[层a、层b、层c],输出=[层f])
compile(优化器='adam',loss=smape\u错误)
但是,当我尝试将数据拟合时,它会产生一个错误:

输入0与层gru_14不兼容:预期ndim=3,发现ndim=2


不确定出了什么问题?

GRU层需要以下维度(批次大小、顺序、尺寸) 此外,它还返回(批处理大小、神经元数量),因此为了将2个GRU放在彼此之后,第一个GRU层需要设置参数return_sequences=True

此外,在构建keras模型时,最好使用model.summary()(在错误出现之前只构建模型的一部分)进行调试。问题往往出在意想不到的形状上


您的体系结构根本不适合使用GRU层。首先,你不能展平张量,因为这会破坏你的序列结构。这将使连接层变得不可能。您可以将树层layer_t、layer_tt和layer_ttt合并到相同的第二维度(应该大于1)。通过这种方式,您可以连接最后一个维度,并获得一个具有类似序列形状的张量,将其放入gru层。

嗨,我在第一个gru层中设置了return\u sequences=True,但错误仍然存在……除了最后一个gru层之外,您在每个gru层中都会看到这个。还要检查第一个gru层作为输入接收的形状。第一个gru层的输入是CNN连接层(无,15552)。我已经更新了上面各层的输入形状。我对前两个GRU层使用return_序列,但错误仍然存在。。。不确定如何重塑GRU的输入。请注意,这是没有文字的时间序列数据。所以我不认为嵌入层作为GRU输入是必要的,不是吗?我更新了我的答案,问题是不能使用形状张量(无,15552)作为GRU层的输入。使用嵌入层可能是我答案中的解决方案之外的另一种解决方案。