【问题标题】:Define own loss and classify error in cntk在cntk中定义自己的损失和分类错误
【发布时间】:2017-08-28 08:30:13
【问题描述】:

我知道人们通常使用下面的损失和错误来训练

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

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

【问题讨论】:

    标签: classification customization cntk loss


    【解决方案1】:

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

    ce = C.negate(C.reduce_sum(C.element_times(target, C.log(prediction)), axis=-1))

    【讨论】:

    • 太好了!我正在努力弄清楚如何将权重添加到您提供的示例中。我正在考虑创建 NxN 个 error_weights 数组,其中 N 是类数。但是,我不确定如何使用 error_weights、ResNet 模型、z 和输入 label_var 来创建有效的损失,这类似于 cross_entropy_with_softmax(z, label_var)。可以给我一些简单的示例代码或一些我可以遵循的方向吗?谢谢!
    • 如果我可以从模型 z 中获取输出,我想我可以在下面创建方法。反正有没有从模型中得到预测? def my_criterion(z, target): prediction = get_from_model(z) loss = calculate_loss_with_weights(prediction, target) return loss
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2017-08-28
    相关资源
    最近更新 更多