2017-08-28 74 views
1
分类错误

我理解人们通常使用的损失及以下的错误培养定义自己的损失和cntk

ce = cross_entropy_with_softmax(z, label_var) 
pe = classification_error(z, label_var) 
trainer = Trainer(z, (ce, pe), ...) 

我们可以覆盖或定义自己的损失和错误的方法呢?我们真正需要的是在计算损失和错误时添加权重。例如,我们有4个班级,重要的是(更重要的是)不要将第一班级错误分类为其他班级,反之亦然,但是如果它在最后3个班级中错误归类,则不重要(重量更轻)。在cntk中处理这个问题的最好方法是什么?

回答

1

是,任何CNTK表达式是有效的损失或错误:在这里,交叉熵:

CE = C.negate(C.reduce_sum(C.element_times(目标,C.log(预测)),轴= -1))

+0

太棒了!我正在努力弄清楚如何将权重添加到您提供的示例中。我想创建NxN的error_weights数组,其中N是类的数量。但是,我不确定如何使用error_weights,ResNet Model,z和输入label_var创建有效损失,这与cross_entropy_with_softmax(z,label_var)类似。将可能给我一些简单的示例代码或我可以遵循的某些方向?谢谢! –

+0

我想我可以在下面创建方法,如果我可以从模型z得到输出。无论如何要从模型中获得预测吗? def my_criterion(z,target): prediction = get_from_model(z) loss = calculate_loss_with_weights(预测,目标) 回报损失 –