使用Keras做分类的时候踩了一个坑,也是拿来主义的锅,估计也有不少同志遇到。
在进行分类的时候,往往使用categorical_crossentropy
,有时候萌新(像我)会用binary_crossentropy
,虽然结果可能上浮30%,但是这个结果是不对的。model.fit
以及model.evaluate
给出的acc
的值都是有问题的,正确的计算方法应该是:
# Actual accuracy calculated manually:
y_pred = model.predict(x_test)
acc = sum([np.argmax(y_test[i])==np.argmax(y_pred[i]) for i in range(10000)])/10000
其中
numpy.argmax(a, axis=None, out=None)
# 返回沿轴axis最大值的索引。
使用测试样本的数量代替10000
,输出的acc才是正确的结果。
这个方法是使用二分类的时候才能使用的,label的个数多于2就不能使用。