Pytorch 中的最大运算是否可微分?
Is max operation differentiable in Pytorch?
我正在使用 Pytorch 来训练一些神经网络。我感到困惑的部分是:
prediction = myNetwork(img_batch)
max_act = prediction.max(1)[0].sum()
loss = softcrossentropy_loss - alpha * max_act
在上面的代码中,“prediction”是“myNetwork”的输出张量。
我希望在一个批次中最大化“预测”的最大输出。
例如:
[[-1.2, 2.0, 5.0, 0.1, -1.5] [9.6, -1.1, 0.7, 4,3, 3.3]]
对于第一个预测向量,第三个元素是最大的,而对于第二个向量,第一个元素是最大的。我想最大化“5.0+9.6”,虽然我们不知道新输入数据的最大输出是什么索引。
事实上,我的训练似乎是成功的,因为“max_act”部分真的增加了,这是我想要的行为。然而,我听到一些关于 max() 操作是否可微的讨论:
Some says, mathmatically, max() is not differentiable.
Some says, max() is just an identity function to select the largest element, and this largest element is differentiable.
所以我现在很困惑,我担心我最大化“max_act”的想法是否从一开始就错了。
如果 max() 操作在 Pytorch 中是可微的,有人可以提供一些指导吗?
max
对于 值 是可微的,而不是 指数 。它在您的应用程序中完全有效。
从梯度的角度来看,d(max_value)/d(v)
如果max_value==v
为1,否则为0。您可以将其视为选择器。
d(max_index)/d(v)
没有真正意义,因为它是一个不连续的函数,只有 0
和 undefined
作为可能的梯度。
我正在使用 Pytorch 来训练一些神经网络。我感到困惑的部分是:
prediction = myNetwork(img_batch)
max_act = prediction.max(1)[0].sum()
loss = softcrossentropy_loss - alpha * max_act
在上面的代码中,“prediction”是“myNetwork”的输出张量。 我希望在一个批次中最大化“预测”的最大输出。
例如: [[-1.2, 2.0, 5.0, 0.1, -1.5] [9.6, -1.1, 0.7, 4,3, 3.3]] 对于第一个预测向量,第三个元素是最大的,而对于第二个向量,第一个元素是最大的。我想最大化“5.0+9.6”,虽然我们不知道新输入数据的最大输出是什么索引。
事实上,我的训练似乎是成功的,因为“max_act”部分真的增加了,这是我想要的行为。然而,我听到一些关于 max() 操作是否可微的讨论:
Some says, mathmatically, max() is not differentiable.
Some says, max() is just an identity function to select the largest element, and this largest element is differentiable.
所以我现在很困惑,我担心我最大化“max_act”的想法是否从一开始就错了。 如果 max() 操作在 Pytorch 中是可微的,有人可以提供一些指导吗?
max
对于 值 是可微的,而不是 指数 。它在您的应用程序中完全有效。
从梯度的角度来看,d(max_value)/d(v)
如果max_value==v
为1,否则为0。您可以将其视为选择器。
d(max_index)/d(v)
没有真正意义,因为它是一个不连续的函数,只有 0
和 undefined
作为可能的梯度。