【问题标题】:How to write dice-loss backpropogation with numpy如何用 numpy 编写骰子损失反向传播
【发布时间】:2019-10-19 01:15:08
【问题描述】:

我正在尝试自己编写一个骰子损失函数。这是我写的前传。但我不明白如何计算反向传播。我试图写一些,但它不工作。还是 dice-loss 根本不需要 back prop?

alpha = 0.5
belta = 0.5

tp = np.sum(pred * label)

fn = np.sum((1- pred ) * label)

fp = np.sum(pred * (1 - label))

dice = tp / (tp + alpha * fn + belta * fp)

【问题讨论】:

    标签: python numpy backpropagation dice loss-function


    【解决方案1】:

    我不确定我是否会称之为前向传球。您如何获得 pred ? 通常你需要写下导致 pred 的步骤。然后你会像你一样得到你的损失。这定义了一个计算图。从那里可以开始反向传播(或反向传播)。您需要从计算图的末尾开始计算梯度,然后向后进行以获得损失相对于权重的梯度。 我在一篇博文 (https://www.qwertee.io/blog/an-introduction-to-backpropagation) 中写了一篇关于反向传播的介绍,我想你应该找到更多关于如何做到这一点的细节。

    【讨论】:

      【解决方案2】:

      你只需要使用微积分和链式法则来解决这个问题。

      骰子定义为。 X 是您的 pred,Y 是您的标签。

      对于大小为 MxN 的矩阵 X 和 Y,我们可以将其写为 。

      对 X 中的任意值 i,j 应用商规则:

      我们现在可以除以|X|+|Y|这给了我们一个非常简洁的解决方案:

      在python中:

      dX = (2*Y-dice)/(np.sum(X)+np.sum(Y))
      

      如果你在骰子的分子和分母中添加一个平滑项:

      dX = (2*Y-dice)/(np.sum(X)+np.sum(Y)+eps)
      

      如果你保存骰子,|X|和 |Y|前向计算中的变量,您不必在后向计算中再次计算它们。

      【讨论】:

        猜你喜欢
        • 2020-09-10
        • 2021-07-18
        • 2018-06-14
        • 2022-01-18
        • 1970-01-01
        • 2019-01-29
        • 1970-01-01
        • 2019-02-03
        • 2017-06-20
        相关资源
        最近更新 更多