【问题标题】:Multi-Output Classification with Keras使用 Keras 进行多输出分类
【发布时间】:2018-12-15 04:20:33
【问题描述】:

我正在使用 keras 构建多输出分类模型。我的数据集如

[x1,x2,x3,x4,y1,y2,y3]

x1,x2,x3 是特征,y1,y2,y3 是标签,y1,y2,y3 是多类。

而且我已经建立了一个模型(我忽略了一些隐藏层):

def baseline_model(input_dim=23,output_dim=3):
    model_in = Input(shape=(input_dim,))
    model = Dense(input_dim*5,kernel_initializer='uniform',input_dim=input_dim)(model_in)
    model = Activation(activation='relu')(model)
    model = Dropout(0.5)(model)

    ...................

    model = Dense(output_dim,kernel_initializer='uniform')(model)
    model = Activation(activation='sigmoid')(model)

    model = Model(model_in,model)
    model.compile(optimizer='adam',loss='binary_crossentropy', metrics=['accuracy'])
    return model

然后我尝试使用keras的方法让它支持分类:

estimator = KerasClassifier(build_fn=baseline_model)
estimator.fit()
estimator.predict(df[0:10])

但是我发现结果不是多输出,只输出一维。

[0,0,0,0,0,0,0,0,0,0]

那么对于多输出分类问题,我们不能用KerasClassifier函数来学习吗?

【问题讨论】:

    标签: tensorflow keras deep-learning multilabel-classification multiclass-classification


    【解决方案1】:

    您不需要将模型包装在 KerasClassifier 中。该包装器使您可以将 Keras 模型与 Scikit-Learn 一起使用。模型的类型(分类器、回归、多类分类器等)最终取决于模型最后一层的形状和激活。

    您可以简单地使用 Keras 中的 model.fit() 函数。确保将数据传递给函数。您可以在此处查看有关 fit 函数的更多信息:https://keras.io/models/model/#fit

    您的损失也设置为 binary_crossentropy。对于多类问题,您将需要使用 categorical_crossentropy。

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

    据我所知,这个模型并不是 Keras 所说的多输出。对于多输出,您试图从几个不同的层获取输出,并可能对它们应用不同的损失函数。

    根据您问题中的设置,您可以根据需要使用 Keras Sequential 模型而不是 Functional 模型。如果可以,Keras 建议使用 Sequential 模型,因为它更简单。 https://keras.io/getting-started/sequential-model-guide/

    【讨论】:

      猜你喜欢
      • 2017-09-27
      • 1970-01-01
      • 2019-06-24
      • 2021-02-17
      • 2018-08-05
      • 2018-02-17
      • 2019-08-08
      • 2020-12-20
      • 2020-06-26
      相关资源
      最近更新 更多