如果你想要类似于keras的东西,你只需要关心y_test和y_pred(y_test是y_true):
def acc(y_true, y_pred):
return np.equal(np.argmax(y_true, axis=-1), np.argmax(y_pred, axis=-1)).mean()
这是我的 POC:
import numpy as np
# y_test onehot encoded
y_test = np.array([[1, 0, 0],[0, 1, 0],[0, 0, 1], [0, 1, 0], [1, 0, 0]])
y_pred = np.random.random((5,3))
print("y_true: " + str(np.argmax(y_test, axis=-1)))
print("y_pred: " + str(np.argmax(y_pred, axis=-1)))
def acc(y_true, y_pred):
return np.equal(np.argmax(y_true, axis=-1), np.argmax(y_pred, axis=-1)).mean()
print("accuracy: " + str(acc(y_test, y_pred)))
结果:
y_real: [0 1 2 1 0]
y_pred: [1 1 0 1 0]
accuracy: 0.6
更新 1: 因为它是用于二进制分类,所以函数将是这样的:
def acc(y_true, y_pred):
return np.equal(y_true, np.round(y_pred)).mean()
POC:
import numpy as np
y_test = np.array([1, 0, 0, 1, 0])
y_pred = np.random.random((5))
print("y_true: " + str(y_test))
print("y_pred: " + str(np.round(y_pred).astype(int)))
def acc(y_true, y_pred):
return np.equal(y_true, np.round(y_pred)).mean()
print("accuracy: " + str(acc(y_test, y_pred)))