【问题标题】:CNN with keras: Input 0 is incompatible with layer flatten_2: expected min_ndim=3, found ndim=2带有 keras 的 CNN:输入 0 与 flatten_2 层不兼容:预期 min_ndim=3,发现 ndim=2
【发布时间】:2020-10-10 02:32:54
【问题描述】:

我不明白这个错误是我的模型

    L_branch = Sequential()
    L_branch.add(Embedding(vocab_size, output_dim=15, input_length=3000, trainable=True))
    L_branch.add(Conv1D(50, activation='relu', kernel_size=70, input_shape=(3000, )))
    L_branch.add(MaxPooling1D(15))
    L_branch.add(Flatten())

    # second model
    R_branch = Sequential()
    R_branch.add(Dense(14, input_shape=(14,), activation='relu'))
    R_branch.add(Flatten())

    merged = Concatenate()([L_branch.output, R_branch.output])
    out = Dense(70, activation='softmax')(merged)

    final_model = Model([L_branch.input, R_branch.input], out)
    final_model.compile(
                loss='categorical_crossentropy',
                optimizer='adam',
                metrics=['accuracy'])
    final_model.summary()
    final_model.fit(
            [input1, input2],
            Y_train,
            batch_size=200,
            epochs=1,
            verbose=1,
            validation_split=0.1
        )

输入 1 的形状为 (5039, 3000)

并输入 2 (5039, 14)

那么为什么扁平密集需要第三维?如果dense不改变嵌入层或卷积等维数?

【问题讨论】:

    标签: keras conv-neural-network


    【解决方案1】:

    删除 Flatten 层...无需使用它。这里是完整的结构

    L_branch = Sequential()
    L_branch.add(Embedding(vocab_size, output_dim=15, input_length=3000, trainable=True))
    L_branch.add(Conv1D(50, activation='relu', kernel_size=70, input_shape=(3000, )))
    L_branch.add(MaxPooling1D(15))
    L_branch.add(Flatten())
    
    # second model
    R_branch = Sequential()
    R_branch.add(Dense(14, input_shape=(14,), activation='relu'))
    
    merged = Concatenate()([L_branch.output, R_branch.output])
    out = Dense(70, activation='softmax')(merged)
    
    final_model = Model([L_branch.input, R_branch.input], out)
    final_model.compile(
                loss='categorical_crossentropy',
                optimizer='adam',
                metrics=['accuracy'])
    final_model.summary()
    

    【讨论】:

    • @leila 不要忘记投票并接受它作为答案
    • 你能告诉我为什么模型会删除数据吗?例如,这里的模型使数据从 5039 个样本变为 4535 个。现在正在生成“ValueError:所有输入数组 (x) 应该具有相同数量的样本。得到数组形状:[(4535, 3000), (5039, 14)]"??
    • 这似乎与模型无关...这与您的数组的形状有关... input1,input2 有不同数量的观察结果
    • 不,它们的样本数量相同,它们都是 5039!!!
    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 2022-07-13
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多