Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么tf.keras.models.Sequential在evaluate()后与sklearn.metrics.Mission_矩阵相比给出了不同的精度?_Python_Tensorflow_Keras_Metrics - Fatal编程技术网

Python 为什么tf.keras.models.Sequential在evaluate()后与sklearn.metrics.Mission_矩阵相比给出了不同的精度?

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

我正在使用tf.keras通过以下设置训练二进制分类器:

Tensorflow 2.0-GPU,运行Python 3.6的Jupyter笔记本电脑

当我训练我的模型时,我收到的训练数据报告准确率约为83%。然后,我用测试数据对模型进行了评估,并获得了大约83%的准确率。然而,如果我用sklearn创建一个分类矩阵,并用这种方法计算准确度,我会得到大约68%的准确度

tf.keras计算精度是否与预期方法不同:(正确分类/总分类)*100%

以下是我的相关代码和相应输出:

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()似乎返回概率,而不是二进制输出。我还认为这很奇怪,并愿意就如何直接获得二进制输出提出建议(除了我最初的问题)。