在Keras中获取多输出模型的类别

我正在使用Keras 2+8的函数式API同时解决分类和回归问题。我不知道如何从分类输出中分配标签,因为我得到的是概率。对于函数式API没有predict_classes函数。我欢迎任何建议。

def run (X_train):    _input = keras.layers.Input(shape=(1024,))    hidden1=Dense(500, activation = 'elu')(_input)    hidden2=Dense(300, activation = 'elu')(hidden1)    classification = keras.layers.Dense(1, activation="sigmoid", name="classification")(hidden2)    regression = keras.layers.Dense(1, activation="linear", name="regression")(hidden2)    multi_model = keras.Model(inputs=[_input], outputs=[classification, regression])        multi_model.compile(loss={'classification': 'binary_crossentropy','regression': 'mse'},                        optimizer='Nadam',                        metrics={'classification':'AUC', 'regression': 'mse'})       multi_model.fit([X_train, X_train],                    [y_train_C, y_train_R],                    validation_split=0.2,                    callbacks=callbacks,                    batch_size=128,                    epochs=500,                    verbose=0)    return multi_model

这是我如何使用训练好的模型进行预测的:

prediction = fcfp4.predict([X_test,X_test])

我尝试使用argmax,但它只给我0值(应该为0或1)。根据评估,我应该得到非常好的分类预测:

fcfp4.evaluate([X_test,X_test], [y_test_C, y_test_R])1/1 [==============================] - 0s 998us/step - loss: 2.0826 - classification_loss: 0.0845 - regression_loss: 1.9981 - classification_auc_55: 1.0000 - regression_mean_squared_error: 1.9981

我期望得到这样的数组:

array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0])

但只得到0


回答:

要从sigmoid函数获得预测结果,您只需将预测值大于0.5的视为类别1,否则为0。以下是完整的示例:

n_sample = 100features = 1024X_train = np.random.uniform(0,1, (n_sample,features))y_train_R = np.random.uniform(0,1, n_sample)y_train_C = np.random.randint(0,2, n_sample)def run(X_train, y_train_C, y_train_R):        _input = keras.layers.Input(shape=(features,))    hidden1 = keras.layers.Dense(500, activation = 'elu')(_input)    hidden2 = keras.layers.Dense(300, activation = 'elu')(hidden1)    classification = keras.layers.Dense(1, activation="sigmoid", name="classification")(hidden2)    regression = keras.layers.Dense(1, activation="linear", name="regression")(hidden2)    multi_model = keras.Model(inputs=[_input], outputs=[classification, regression])        multi_model.compile(loss={'classification': 'binary_crossentropy','regression': 'mse'},                        optimizer='Nadam',                        metrics={'classification':'AUC', 'regression': 'mse'})       multi_model.fit(X_train,                    [y_train_C, y_train_R],                    validation_split=0.2,                    batch_size=128,                    epochs=5,                    verbose=1)        return multi_modelmulti_model = run(X_train, y_train_C, y_train_R)prediction_class, prediction_reg = multi_model.predict(X_train)prediction_class = (prediction_class>0.5).ravel()+0

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注