首页 > 解决方案 > ValueError: Input 0 of layer dense_8 is in compatible with the layer: using tf.keras 2 CNNs to concatenate

问题描述

我正在尝试连接 2 个 CNN。这是代码:

        input1 = keras.layers.Input(shape=(64,64,1), name="camera")

        input2 = keras.layers.Input(shape=(64,64,1), name="lidar")
        

        #  First branch

        input1_features = keras.layers.Lambda(lambda x: x / 255.0)(input1)

        input1_features = keras.layers.Conv2D(16, (3, 3), strides=(4, 4), padding = 'same', activation='relu')(input1_features)

        input1_features = keras.layers.Conv2D(32, (2, 2), strides=(2, 2), padding = 'same' ,activation='relu')(input1_features)

        input1_features = keras.layers.Flatten()(input1_features)



        # Second branch

        input2_features = keras.layers.Lambda(lambda x: x / 255.0)(input2)

        input2_features = keras.layers.Conv2D(16, (3, 3), strides=(4, 4), padding = 'same', activation='relu')(input2_features)

        input2_features = keras.layers.Conv2D(32, (2, 2), strides=(2, 2), padding = 'same' ,activation='relu')(input2_features)

        input2_features = keras.layers.Flatten()(input2_features)




        merged = keras.layers.Concatenate(axis=1)([input1_features, input2_features])

        hidden1 = keras.layers.Dense(128, activation='relu')(merged)

        hidden2 = keras.layers.Dense(256, activation='relu')(hidden1)

        output = keras.layers.Dense(action_space, activation='softmax', name="action")(hidden2)

        nn = keras.models.Model([input1, input2], output)
        nn.compile(loss={"camera" : "mse",
                         "lidar" : "mse"},
                          optimizer=Adam(lr=LEARNING_RATE))

ValueError:dense_4 层的输入 0 与该层不兼容:输入形状的预期轴 -1 具有值 4096,但接收到形状为 [32, 512] 的输入

这是预测的代码:

np.argmax(dqn.predict([camera,lidar]))

我已经仔细检查了两个图像的形状,它们是 (64,64,1)。

我正在尝试编写 aa nn,它将 2 个图像作为输入并输出 9 个动作之一。

我已经尝试过使用 Dense 中的所有参数,但我一无所获。这是模型的摘要:

概要模型

标签: pythontensorflowkerasconcatenationconv-neural-network

解决方案


推荐阅读