从图像角度理解torch.mean()函数。继而学习torch.max等等相关函数
Posted 板蓝根先生627
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从图像角度理解torch.mean()函数。继而学习torch.max等等相关函数相关的知识,希望对你有一定的参考价值。
(1)归根到底,torch.mean()函数是求平均值的
(2)深度学习时,图片通常是四位的即[b,c,h,w]。其中b表示图片个数,c、h、w分别表示每一个图片通道数,高和宽
假设 y = torch.arange(24).view(2,2,3,2)。也就是有两个图片,每个图片的维度、高、宽是2,3,2
①torch.mean(dim = 0 , keepdim = True)
对某一个维度求torch.mean()我们就首先将该维度置为1,因此,这个最终结果的维度一定是[1,2,3,2]。
0为表示的是图像个数,也就是对每一个图像的对应位置求平均值。(下面这段内容可以不看:在看一篇vit相关的论文时,特征图是[b,HW,C],这时在第0维度上进行求平均值代替平均池化的操作。)
②torch.mean(dim = 1 , keepdim = True)
对某一个维度求torch.mean()我们就首先将该维度置为1,因此,这个最终结果的维度一定是[2,1,3,2]。
1维为表示的是每个图像的通道,也就是在同一个图像的对应通道像素值进行求平均,如图。
③torch.mean(dim = 3 , keepdim = True)
对某一个维度求torch.mean()我们就首先将该维度置为1,因此,这个最终结果的维度一定是[2,2,1,2]。第四维我们就不做了实际上从这就已经很清晰啦。
2维为表示的是每个图像的每一个通道的高,因此我们要对每一个图像的每一个通道上的每一个高进行求平均,如图。
pytorch自定义损失函数最小化向量之间的角度
【中文标题】pytorch自定义损失函数最小化向量之间的角度【英文标题】:pytorch custom loss function on minimizing the angle between vectors 【发布时间】:2021-04-03 04:17:12 【问题描述】:目标是在神经网络设置中最小化实际向量和预测向量之间的角度。有人可以检查以下执行是否正确?
criterion = nn.CosineSimilarity()
loss = torch.mean(torch.abs(criterion(actual_vectors,predicted_vectors)))
#back-propagation on the above *loss* will try cos(angle) = 0. But I want angle between the vectors to be 0 or cos(angle) = 1.
loss = 1 - loss
#To me, the above does not seem right. Isn't back-propagation on the above 'loss' similar to minimizing the negative of 'loss' from line 2?
#Does '1' have no role to play here when back-propagation is applied?
loss.backward()
【问题讨论】:
【参考方案1】:理论上这是有道理的。反向传播的目标是最小化损失。如果损失是1 - cos(A)
(其中A是两者之间的角度差),那么这相当于说目标是最大化cos(A)
,这反过来又相当于最小化两个向量之间的角度。
一个简单的例子是最小化X^2 + 4
的目标,该优化问题的答案与最大化-(X^2 + 4)
的目标的答案相同。在整个等式上加上一个减号并将 min 与 max 交换将使语句等效。因此,如果您有一个想要 MAXIMIZE 的函数,而您的优化模型只能 MINIMIZE,那么只需在您的函数上加一个减号,就可以结束了。
您可能会问的另一个问题是“1 有什么重要意义?我们可以说loss = -loss
”吗?答案是……这取决于。理论上是的,这是等效的,并且在反向传播中不起作用(因为它随着导数消失)。但是,一旦我们开始讨论具有数值错误和复杂优化器/更新规则的实际优化,那么常量 1 可能会起作用。
使用 1 的另一个原因是,您的损失可以很好地定义在 0 和 1 之间,这是一个很好的属性。
所以是的,通过反向传播最小化1 - cos(A)
的损失相当于最小化向量之间的角度。
【讨论】:
这很有帮助!此外,“您可能会问的另一个问题是“1 有什么意义?” - 这是我真正想到的另一个问题。感谢您对此的意见。 嗨@AjayA 如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。 嗨@A Kareem,当然。将等待一两天来听取其他人的意见(如果有),并确保接受答复以上是关于从图像角度理解torch.mean()函数。继而学习torch.max等等相关函数的主要内容,如果未能解决你的问题,请参考以下文章