【发布时间】:2020-12-30 11:33:29
【问题描述】:
我正在使用 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 中是可区分的,有人可以提供一些指导吗?
【问题讨论】:
标签: optimization deep-learning neural-network pytorch gradient