Image processing 带上[0,1]范围内的任何PyTorch cuda张量
假设我有一个PyTorch-Cuda浮点张量Image processing 带上[0,1]范围内的任何PyTorch cuda张量,image-processing,computer-vision,pytorch,Image Processing,Computer Vision,Pytorch,假设我有一个PyTorch-Cuda浮点张量x的形状[b,c,h,w]接受浮点张量范围允许的任意值。我想在[0,1]范围内对其进行归一化 我想到了以下算法(,但任何其他算法也可以) 步骤1:找出每批中的最小值。称之为min并具有形状[b,1,1,1] 步骤2:同样地,找到最大值并称之为max 步骤3:使用y=(x-min)/max。或者使用y=(x-min)/(max-min)。我不知道哪一个更好y的形状应与x的形状相同 我正在使用PyTorch 1.3.1 具体来说,我无法使用torch.mi
x
的形状[b,c,h,w]
接受浮点张量范围允许的任意值。我想在[0,1]范围内对其进行归一化
我想到了以下算法(,但任何其他算法也可以)
步骤1:找出每批中的最小值。称之为min
并具有形状[b,1,1,1]
步骤2:同样地,找到最大值并称之为max
步骤3:使用y=(x-min)/max
。或者使用y=(x-min)/(max-min)
。我不知道哪一个更好y
的形状应与x
的形状相同
我正在使用PyTorch 1.3.1
具体来说,我无法使用torch.min()
获得所需的min
。max
也是如此
我将使用它将其输入预先训练的VGG,以计算感知损失(在上述归一化之后,我将另外将它们带到ImageNet mean和std)。由于某些原因,我无法在数据加载期间强制执行[0,1]范围,因为我所在区域的先前工作有一个非常具体的归一化算法,必须使用该算法,但有时无法确保[0,1]范围,但会在其附近的某个地方。这就是为什么在计算知觉损失的时候,我必须做这个明确的标准化作为预防措施。据我所知,感知损失的开箱即用实现假设数据在[0,1]或[-1,1]范围内,因此不进行此转换
非常感谢这不是最优雅的方式,但您可以使用
keepdim=True
并指定每个维度:
channel\u min=x.min(dim=1,keepdim=True)[0]。min(dim=2,keepdim=True)[0]。min(dim=3,keepdim=True)[0]
通道_max=x.max(dim=1,keepdim=True)[0]。max(dim=2,keepdim=True)[0]。max(dim=3,keepdim=True)[0]
谢谢你。我在python中尝试了它们,channel\u min
和channel\u max
按照它们应该的方式工作。但是我发现y=(x-min)/max
是错误的,结果不正确,y=(x-min)/(max-min)
是唯一的选择。无论如何,谢谢你