如何用numpy编写骰子丢失反向传播

时间:2019-06-03 13:09:16

标签: python numpy backpropagation dice loss-function

我正在尝试自己编写丢骰子函数。这是我写的前向通行证。但是我不明白如何计算反向传播系数。我试图写一些,但是没有用。还是骰子损失根本不需要支撑?

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)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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

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

在蟒蛇中:

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

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

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

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