我正在利用Keras 2 + 8 Functional API同时解决分类和回归问题。当我得到概率时,我不知道如何从分类输出中分配标签。功能性API没有predict_class。我欢迎提出建议。
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
要从S型获得预测,如果pred大于0.5,则只需将其视为1类,否则为0。在这里,请参见完整示例
n_sample = 100
features = 1024
X_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_model
multi_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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句