Image processing 带上[0,1]范围内的任何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

假设我有一个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.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)
是唯一的选择。无论如何,谢谢你