如何在CNTK中应用自定义正则化(使用python)?

2024-05-14 19:00:17 发布

您现在位置:Python中文网/ 问答频道 /正文

你知道我如何对CNTK应用自定义正则化函数吗?在

特别是,我想把functtino wrt的导数加到输入中,比如

newLoss = loss + lambda * gradient_F(inputs)

其中F是模型学习的函数,输入是模型的输入。在

如何在CNTK中实现这一点?我不知道如何获取输入的梯度,以及如何获取正则化器的权重。在


Tags: lambda函数模型权重梯度inputs导数化器
3条回答

下面是执行此操作的代码:

    def cross_entropy_with_softmax_plus_regularization(model, labels, l2_regularization_weight):
        w_norm = C.Constant(0);
        for p in (model.parameters):
            w_norm = C.plus(w_norm, 0.5*C.reduce_sum(C.square(p)))

        return C.reduce_log_sum_exp(model.output) - 

C.reduce_log_sum_exp(C.times_transpose(labels, model.output)) + l2_regularization_weight*w_norm

以及我的博客文章

首先,梯度不是标量,所以优化它没有多大意义。梯度标准可能是一个有趣的东西,增加你的损失。为此,CNTK必须采用梯度标准的梯度,在撰写本文时(2017年7月)不支持该标准。不过,这是一个重要的功能,我们想在接下来的几个月里加入。在

更新:一个解决方法是这样做 noisy_inputs = x + C.random.normal_like(x, scale=0.01) noisy_model = model.clone('share', {x: noisy_inputs}) auxiliary_loss = C.squared_error(model, noisy_model) 但是你必须根据你的问题调整噪音的范围。在

CNTK学习者只接受数字作为正则化(L1/L2)值。如果你真的想添加你的自定义正则化器,你可以很容易地实现你自己的学习者。你可以使用你需要的渐变。您将找到一些关于如何实现自己的学习者here的示例。在

相关问题 更多 >

    热门问题