Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=3. Full shape re

Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 208, 1]

Input 0 of layer conv2d is incompatible with the layer: expected ndim=4, found ndim=3. Full shape re
情景:在卷积用于结构化数据时,自定义Keras类中Conv2D卷积调用报错

报错原因:输入数据是3维的,不符合卷积要求,卷积要求是4维的

卷积计算要求输入的图片必须是4个维度的,第0个维度表示一次喂入几个batch,第1、2、3个维度分别表示输入图片的分辨率和通道数。这一部分详细且简单明了的解释可以参考下面的链接:https://baijiahao.baidu.com/s?id=1647365166670429226&wfr=spider&for=pc

  • 1.你始终必须将形状为(batch_size, height, width, depth)的4D数组输入CNN。
  • 2.CNN的输出数据也是形状(batch_size, height, width, depth)的4D数组。
  • 3.要在CNN层的顶部添加一个Dense层,我们必须使用keras的Flatten层将CNN的4D输出更改为2D。

代码部分修改:

只贴出关键代码

def call(self, inputs, training=None, mask=None):
    dense_inputs, sparse_inputs = inputs[:, :13], inputs[:, 13:]

    sparse_embed = [layer(sparse_inputs[:, i]) for i, layer in enumerate(self.emb_layers)]  # 26 * [None, k]
    # 卷积要求输入为4维
    sparse_embed = tf.transpose(tf.convert_to_tensor(sparse_embed), [1, 0, 2])  # [None, 26, k]
    print(sparse_embed.shape)

    fgcnn_out = self.fgcnn_layers(sparse_embed)
 def call(self, inputs, **kwargs):
    x = tf.expand_dims(inputs, axis=-1)  # [None, n, k, 1] 最后一维为通道

参考链接:
https://blog.csdn.net/tushuguan_sun/article/details/105914661

上一篇:js实现全屏及退出全屏


下一篇:杰理之获取充满电压的具体数值【篇】