为什么颜色通道的平均值不等于扁平数组的平均值

数据挖掘 Python 神经网络
2022-02-24 02:27:18

我正在尝试对卷积神经网络的 RGB 图像进行不同类型的均值减法。我尝试计算所有训练图像的单一平均值。我还尝试计算每个颜色通道的平均值。我得到的平均数122.84听起来像是一个合理的数字。但是,当我尝试计算每个颜色通道的平均值时,我得到了 [4.86049, 4.86049, 4.86049]. 首先,我觉得奇怪的是它们都是同一个数字。其次,它们看起来低得离谱。第三,也许最令人困惑的是,三个颜色通道的平均值不应该等于总平均值吗?

也许是我的代码有问题?这就是我正在使用的。图像位于形状的 numpy 数组中(17611, 224, 224, 3)

trainImgsArr = np.random.rand(17611, 224, 224, 3)
grandMean = np.mean(trainImgsArr)
meanByChannel = np.mean(trainImgsArr, axis = (0,1,2))

有任何想法吗?

编辑:啊,哈!我想我已经用代码找到了真正的渠道手段

 ch1, ch2, ch3 = np.split(trainImgsArr, 3, axis = 3)
 np.mean(ch1)
 np.mean(ch2)
 np.mean(ch3)

抱歉,如果这是超级基本的,我对 python 很陌生。np.mean有人可以像在第一个代码位中那样使用单个调用来解释我哪里出错了吗?

1个回答

你只是理解numpy错了(上帝保佑那些理解正确的人)。正确的代码应该是:

trainImgsArr = np.random.rand(17611, 224, 224, 3)
grandMean = np.mean(trainImgsArr)
meanByChannel = []
for i in range(0, 3):
    avg = np.mean(trainImgsArr[:, :, :, i]
    meanByChannel.append(avg)

基本上我正在拼接阵列,从所有图像中获取颜色通道的所有像素并将它们平均。而您完全做了其他事情(您的结果不可重现)。Axes (0, 1, 2) 并不表示颜色通道,它仅表示您引用的索引并执行所需的操作。

在此处输入图像描述

忽略卷积部分但检查下标h_n-1你可以通过改变最后一个参数来访问这些位置trainImgsArr.shape