首页 > 解决方案 > 为什么 tensorflow 精度和召回率与相同的 sklearn 指标如此不同

问题描述

您好,当我在使用 sklearn 指标的相同验证集上得分非常差时,我很难理解为什么我在使用 tensorflow 指标的验证集上获得如此高的分数。

我的 CNN 模型有这个形状:

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(100,8)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= 
[tf.keras.metrics.Recall,tf.keras.metrics.Precision])

model.fit(X_train2,
       Y_train2,
       epochs=11,
       batch_size=25,
       verbose=1,
       validation_data=(X_val2,Y_val2),
       class_weight=class_weight)

我得到以下结果:

 Epoch 1/11
 11088/11088 [==============================] - 80s 7ms/step - loss: 0.6293 - recall_m: 0.6242 - 
 precision_m: 0.6242 - f1_m: 0.6242 - val_loss: 0.6388 - val_recall_m: 0.5813 - val_precision_m: 
 0.5813 - val_f1_m: 0.5813


 Epoch 2/11
 11088/11088 [==============================] - 73s 7ms/step - loss: 0.5729 - recall_m: 0.6825 - 
 precision_m: 0.6825 - f1_m: 0.6825 - val_loss: 0.5060 - val_recall_m: 0.8066 - val_precision_m: 
 0.8066 - val_f1_m: 0.8066

在使用这个训练有素的模型来预测我的标签然后使用 sklearn 指标(recall_score 和precision_score)时,我得到了非常不同的结果:

    pred=model.predict(X_val2)
    pred=pred.argmax(axis=1)
    Y_true=Y_val2.argmax(axis=1)

    print("precision_score",precision_score(Y_true,pred))
    print("recall_score",recall_score(Y_true,pred))
precision_score 0.23023467760309865
recall_score 0.49839704069050556

标签: pythonconv-neural-networkmetrics

解决方案


推荐阅读