Python 为什么tf.keras.models.Sequential在evaluate()后与sklearn.metrics.Mission_矩阵相比给出了不同的精度?
我正在使用tf.keras通过以下设置训练二进制分类器: Tensorflow 2.0-GPU,运行Python 3.6的Jupyter笔记本电脑 当我训练我的模型时,我收到的训练数据报告准确率约为83%。然后,我用测试数据对模型进行了评估,并获得了大约83%的准确率。然而,如果我用sklearn创建一个分类矩阵,并用这种方法计算准确度,我会得到大约68%的准确度 tf.keras计算精度是否与预期方法不同:(正确分类/总分类)*100% 以下是我的相关代码和相应输出:Python 为什么tf.keras.models.Sequential在evaluate()后与sklearn.metrics.Mission_矩阵相比给出了不同的精度?,python,tensorflow,keras,metrics,Python,Tensorflow,Keras,Metrics,我正在使用tf.keras通过以下设置训练二进制分类器: Tensorflow 2.0-GPU,运行Python 3.6的Jupyter笔记本电脑 当我训练我的模型时,我收到的训练数据报告准确率约为83%。然后,我用测试数据对模型进行了评估,并获得了大约83%的准确率。然而,如果我用sklearn创建一个分类矩阵,并用这种方法计算准确度,我会得到大约68%的准确度 tf.keras计算精度是否与预期方法不同:(正确分类/总分类)*100% 以下是我的相关代码和相应输出: train_df = d
train_df = df_to_dataset(X_train, y_train, shuffle=True, batch_size=10)
test_df = df_to_dataset(X_test, y_test, shuffle=True, batch_size=10)
lfc = len(feat_cols)
model = tf.keras.models.Sequential([
tf.keras.layers.DenseFeatures(feat_cols),
tf.keras.layers.Dense(lfc, input_dim=lfc, activation='relu'),
tf.keras.layers.Dense(2*lfc, activation='relu'),
tf.keras.layers.Dense(2*lfc, activation='relu'),
tf.keras.layers.Dense(lfc, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid'),
])
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
history = model.fit(train_df, epochs=15)
score = model.evaluate(test_df)
preds = model.predict(test_df)
y_pred = [1 if y > 0.5 else 0 for y in preds]
matrix = confusion_matrix(y_test, y_pred)
print(matrix)
accuracy = (matrix[0][0] + matrix[1][1]) / (matrix[0][0] + matrix[0][1] + matrix[1][0] + matrix[1][1])
print("Accuracy: " + str(accuracy * 100) + "%")
为什么有行“y_pred=[1如果y>0.5,那么pred中的y为0]”?如果您使用的是二进制交叉熵,那么它应该为您做到这一点,因为model.predict()似乎返回概率,而不是二进制输出。我还认为这很奇怪,并愿意就如何直接获得二进制输出提出建议(除了我最初的问题)。