我用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]]
所以,我可以选择手动完成这项工作:
看起来必须有更好的方法吗?
答案 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,当它不准确时应该更高(正)。