如何解决在Pytorch中最大操作有区别吗?
我正在使用Pytorch来训练一些神经网络。我感到困惑的部分是:
prediction = myNetwork(img_batch)
max_act = prediction.max(1)[0].sum()
loss = softcrossentropy_loss - alpha * max_act
在上面的代码中,“预测”是“ 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”最大化的想法是否错误。 如果在Pytorch中max()操作可区分,有人可以提供一些指导吗?
解决方法
max
在值而不是索引上有所区别。在您的应用程序中完全有效。
从渐变角度来看,如果d(max_value)/d(v)
,max_value==v
为1,否则为0。您可以将其视为选择器。
d(max_index)/d(v)
并不真正有意义,因为它是一个不连续的函数,只有0
和undefined
是可能的渐变。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。