我试图在Keras中创建两个自定义函数f1_metric
和auc_metric
。f1_metric
工作,但auc不,我收到不同的错误。下面是我的代码:
def f1_metric(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
recall = true_positives / (possible_positives + K.epsilon())
f1_val = 2*(precision*recall)/(precision+recall+K.epsilon())
return f1_val
def auc_metric(y_true, yhat):
yhat = yhat[:, 1]
# calculate roc curves
fpr, tpr, thresholds = roc_curve(y_true, yhat)
auc=auc(tpr,fpr)
return auc
以下是我的编译和适配代码:
opt = SGD(lr=0.01,momentum=0.9)
model.compile(loss='binary_crossentropy', optimizer=opt,metrics=['accuracy']) #
ca = SnapshotEnsemble(n_epochs, n_cycles, 0.01)
# fit model
history=model.fit(trainX, trainy, validation_data=(testX, testy), epochs=n_epochs,
verbose='auto', callbacks=[ca],batch_size=32)
你知道怎么解决吗?我想定义一个与f1_metric类似的函数。
From comments
近似ROC或PR曲线的AUC(曲线下面积)。
tf.keras.metrics.AUC( num_thresholds=200, curve='ROC', summation_method='interpolation', name=None, dtype=None, thresholds=None, multi_label=False, num_labels=None, label_weights=None, from_logits=False )
详情请参阅此处
(转述自《特洛伊船长》)