从图像角度理解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等等相关函数的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch:tensor.mean()和tensor.sum()

从数学的角度理解函数式接口

opencv边缘检测的入门剖析

从汇编指令角度理解函数调用过程

从两个角度理解为什么 JS 中没有函数重载

R语言使用magick包的image_scale函数对图像进行缩放(resize)可以自定义从宽度或者高度角度进行缩放