如何使用CNTK classification_error()?

How to use CNTK classification_error()?

我试图理解 cntk.metrics.classification_error() 的正确用法,并用它来验证一批预测是否符合其基本事实。

下面的玩具示例(基于 Python API docs):

import numpy as np
from cntk.metrics import classification_error

predictions = np.asarray([[1., 2., 3., 4.],[1., 2., 3., 4.],[1., 2., 3., 4.]], dtype=np.float32)
labels = np.asarray([[0., 0., 0., 1.],[0., 0., 0., 1.],[0., 0., 1., 0.]], dtype=np.float32)
classification_error(predictions, labels).eval()

产生以下结果:

array([[ 0.,  0.,  1.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  1.]], dtype=float32)

有没有一种方法可以获得矢量而不是方阵,考虑到我想处理大批量,方阵显得效率低下?

我尝试在调用 classification_error() 时使用 axis 关键字,但是无论我设置 axis=0 还是 axis=1 我得到的结果都是空的。

发生这种情况是因为 CNTK 试图变得用户友好,但最终对类型感到困惑 :-) 您可以分辨出来,因为分类错误甚至不正确。

如果您添加一点输入信息,它的语义就会正确。

p = C.input(4)
y = C.input(4)
classification_error(p, y).eval({p:predictions, y:labels})
array([[ 0.],
       [ 0.],
       [ 1.]], dtype=float32)

我们将着手进行修复以防止混淆。