首页 > 解决方案 > 多类模型中的最后一个 Dense 层如何期望形状为 (1,)?

问题描述

我有 15 个班级的多班级问题。模型如下:

def create_model(latent_dimension=1000, num_classes=15):
    input_x = Input(shape=(latent_dimension, 1), dtype='float32')

    conv_1 = Conv1D(16, kernel_size=(64), activation='relu')(input_x)
    maxpool_1 = MaxPool1D(pool_size=(4))(conv_1)
    bn_1 = BatchNormalization()(maxpool_1)

    conv_2 = Conv1D(32, kernel_size=(32), activation='relu')(bn_1)
    maxpool_2 = MaxPool1D(pool_size=(4))(conv_2)
    bn_2 = BatchNormalization()(maxpool_2)

    conv_3 = Conv1D(64, kernel_size=(16), activation='relu')(bn_2)
    bn_3 = BatchNormalization()(conv_3)
    conv_4 = Conv1D(128, kernel_size=(4), activation='relu')(bn_3)

    flatten = Flatten()(conv_4)
    dense1 = Dense(units=128, activation='relu')(flatten)
    out = Dense(units=64, activation='relu')(dense1)
    model = Model(input_x, out)

    inputA = Input(shape=(latent_dimension, 1), dtype='float32')
    inputB = Input(shape=(latent_dimension, 1), dtype='float32')
    inputC = Input(shape=(latent_dimension, 1), dtype='float32')
    inputD = Input(shape=(latent_dimension, 1), dtype='float32')
    inputE = Input(shape=(latent_dimension, 1), dtype='float32')

    cnn_out1 = model(inputA)
    cnn_out2 = model(inputB)
    cnn_out3 = model(inputC)
    cnn_out4 = model(inputD)
    cnn_out5 = model(inputE)

    combined = concatenate([cnn_out1, cnn_out2, cnn_out3, cnn_out4, cnn_out5], axis=-1)

    fully_connected = Dense(128, activation="relu")(combined)
    outputs_fc = Dense(15, activation="softmax")(fully_connected)

    model_encoded = Model(inputs=[inputA, inputB, inputC, inputD, inputE], outputs=outputs_fc)

    model_encoded.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

    print(model_encoded.summary())

    return model_encoded

在此模型的生成器中,我将数据生成为:

def data_gen():
    # some operations
    yield chx, to_categorical(chy, 15)

它们的形状是:

print(len(chx))  # 5
print(chx[0].shape)  # (32, 1000, 1)
print(len(chy))  # 32
print(to_categorical(chy, 15).shape)  # (32, 15)

32 是我的批量大小,5 用于 5 个输入层。(1000, 1) 只是一个信号数据。

当我尝试训练这个模型时,它给出了错误:ValueError: Error when checking target: expected dense_4 to have shape (1,) but got array with shape (15,)

我看不出问题出在哪里。为什么我不能训练这个模型?如果您需要,我可以提供更多信息。

标签: pythonkeras

解决方案


推荐阅读