我想使用平均减法和标准化作为我的CNN模型的规范化。我正在研究Keras分类图像。
但是,我还没有完全理解使用平均减法,标准化和简单处理(例如重新缩放图像= / 255)之间的区别。
在这个question中提到有三种方法可以做到:
np.mean(x) # calculates the mean of the array x
x-np.mean(x) # this is euivalent to subtracting the mean of x from each value in x
x-=np.mean(x) # the -= means can be read as x = x- np.mean(x)
我目前使用的是简单的重新缩放:
train_data = train_data / 255
但我的模特表现很低。所以,我决定更改标准化并使用平均减法,但我不知道如何为3D数组做到这一点。
有不同的方法来进行图像标准化。它解释了here。
对于您的情况,如果您想通过减去数组的平均值来进行标准化。您可以使用np.mean
将3D阵列的平均值与两个轴一起使用。它将为您提供一个进一步从原始值中减去的缩放器值。
train_data = np.random.rand(28,28,3)
mean = np.mean(train_data)
train_data -= mean
如果你想减去每个通道的平均值,你可以在axis
函数中使用mean
参数。
mean = np.mean(train_data,axis=(0, 1))
这将给出每个通道的平均值,并减去平均值,如上面的train_data-=mean
。
此外,您可以通过减去平均值并除以其标准偏差来标准化数据。它在机器学习应用中被广泛使用。