使用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就不能使用。

参考

https://stackoverflow.com/questions/42081257/keras-binary-crossentropy-vs-categorical-crossentropy-performance