我有一批ML任务的图像。图像呈[N,C,H,W]形状的数字阵列
N - number of images
C - chanels (in my case 1)
H - height
W - width
我想使用输入图像作为一种损失函数的激活映射。为此,我想使用以下公式在0和1之间单独归一化每个图像:
zi = (xi – min(x)) / (max(x) – min(x))
我想将每个图像单独规范化为其自己的最大值和最小值,而不是批量值。在批量保存图像的同时,最有效的方法是什么?
您可以使用amin(x, (1,2,3))
获得C、H、W轴上的最小值/最大值。为了能够广播,你需要先转置,然后再转置:
((x.T - np.amin(x, (1,2,3))) / (np.amax(x, (1,2,3)) - np.amin(x, (1,2,3)))).T
示例:
import numpy as np
np.random.seed(0)
n = 5
c = 1
h = 2
w = 3
x = np.random.randint(0, 255, (n, c, h, w))
原始阵列x:
array([[[[172, 47, 117],
[192, 67, 251]]],
[[[195, 103, 9],
[211, 21, 242]]],
[[[ 36, 87, 70],
[216, 88, 140]]],
[[[ 58, 193, 230],
[ 39, 87, 174]]],
[[[ 88, 81, 165],
[ 25, 77, 72]]]])
规格化:
min = np.amin(x, (1,2,3))
max = np.amax(x, (1,2,3))
res = ((x.T - min) / (max - min)).T
结果:
array([[[[0.6127451 , 0. , 0.34313725],
[0.71078431, 0.09803922, 1. ]]],
[[[0.79828326, 0.40343348, 0. ],
[0.86695279, 0.05150215, 1. ]]],
[[[0. , 0.28333333, 0.18888889],
[1. , 0.28888889, 0.57777778]]],
[[[0.09947644, 0.80628272, 1. ],
[0. , 0.2513089 , 0.70680628]]],
[[[0.45 , 0.4 , 1. ],
[0. , 0.37142857, 0.33571429]]]])