python - 为什么 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
解决方案
推荐阅读
- mongodb - 无法在 MongoDB 中使用 Robot 3T 在基于集合级别角色的访问中执行 listCollections
- sql - 从系统表中选择名称并从此表中选择
- computer-vision - 为什么基本矩阵有 2 个等奇异值和 1 个零奇异值?
- image - Xamarin.Forms iOS 图像无法从文件路径显示
- python - Flask 中的多模板渲染
- javascript - 如何将函数注入到需要的文件中?
- c# - 是否可以将 sql 存储过程重写为 c# 代码?
- r - lapply 将列添加到现有数据框
- linux - mov 0x8(%r14,%r15,8),%rax是什么意思
- java - 如何在 JAVA 中无效的扫描仪输入后重新运行代码