pytorch 在计算通过网络反向传播的损失时,在backward()中求和与平均值之间的差值

bq9c1y66  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(106)

我知道我们在转换Tensor的尺度比应用backward(),但是什么时候求和,什么时候表示?

some_loss_function.sum().backward()
-OR-
some_loss_function.mean().backward()
7xllpg7q

7xllpg7q1#

对于你的问题没有规范的答案。本质上你问的是我应该平均还是求和我的损失,作为读者,我们不知道你的问题以及这个损失函数对应的是什么。这完全取决于你的用例。
一般来说,因为你通常不希望损失值与输出的维数成比例,所以你会对求和求平均值。实际上,输出的高维数会导致比求和更高的损失值,而求和意味着输出Tensor的维数是常数。如果你计算损失的总和,你最终会不受控制地缩放损失值和从损失值中推断出的梯度。

qgelzfjb

qgelzfjb2#

经过一些研究,我发现了差异,希望能帮助你:
some_loss_function.sum().backward()计算整个批次中所有损失值的总和,然后基于该总和执行反向传播。这意味着批次中的每个元素对损失的贡献相等,而不管其值如何。这在某些情况下可能很有用,例如当您想要对批次中发生次数较少的罕见事件进行优先级排序时。
some_loss_function.mean().backward()计算整个批次中所有损失值的平均值,然后根据该平均值执行反向传播。这意味着批次中的每个元素对损失的贡献相等,但贡献按其值加权。这在您希望对批次中具有较高损失值的元素进行优先级排序的情况下非常有用。或者当您希望确保渐变被适当地缩放时。

相关问题