检查向量的准确性

时间:2018-04-12 06:29:54

标签: python tensorflow scikit-learn

我用Python学习AI并且遇到这种情况:我创建了一个深度学习模型,在他的输入层中有10个神经元。在输出层我有3个神经元。我将数据分成80%用于学习,20%用于测试。

经过训练的模型已准备好进行测试。

到目前为止,我总是遇到输出层中只有一个神经元的情况。所以,我以这种方式测试了准确性:

classifier = Sequential()
# ...
classifier.add(Dense(units = 3, kernel_initializer = 'uniform', activation = 'sigmoid'))
# ...
y_pred = classifier.predict(np.array(X_test))
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

当输出图层在每次预测时只有一个值时效果很好。

就我而言,每次预测都有3个值。

y_pred = array ([[3.142904686503911194e-11, 1.000000000000000000e+00, 1.729809626091548085e-16],
[7.398544450698540942e-12, 1.000000000000000000e+00, 1.776427415878292515e-22],
[4.224535246066807304e-07, 1.000000000000000000e+00 7.929732391553923065e-12]])

我想将它与我的预期值进行比较,其中:

y_test = [[0, 1, 0], [0, 1, 0], [0, 1, 0]]

所以,我可以选择手动完成这项工作:

  1. 将1放在预测值的最高值中。其他值为0.
  2. 逐行比较两个向量。
  3. 看起来必须有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您想要测量预测向量与预期向量的“接近”程度。描述两个向量之间“差异量”的良好公式是检查增量向量的大小(或平方幅度)(预测 - 预期)。

在这种情况下,您可以执行以下操作:

def square_magnitude(vector):
    return sum(x*x for x in vector)

def inaccuracy(pred, test):  #should only get equal-length items
    return square_magnitude([pred[i] - test[i] for i in range(len(pred))]) / len(pred)

由于您有三个样本:

total_inaccuracy = sum(inaccuracy(y_pred[i], y_test[i]) for i in range(len(y_pred))) / len(y_pred)

当它完全准确时应该为0,当它不准确时应该更高(正)。