Как рассчитать np.mean для изображений 3D-массива? - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу использовать среднее вычитание и стандартизацию в качестве нормализации для моей модели CNN.Я работаю над Keras, классифицируя изображения.

Однако я еще не до конца понимаю разницу между использованием среднего вычитания, стандартизацией и простым процессом, таким как изменение масштаба изображений = / 255.

В этом вопросе этобыло упомянуто, что есть три способа сделать это:

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

Но у меня низкая производительность модели.Итак, я решил изменить нормализацию и использовать среднее вычитание, но я не знаю, как это сделать для трехмерного массива.

1 Ответ

0 голосов
/ 18 апреля 2019

Существуют разные способы нормализации изображения. Это объясняется здесь .

Для вашего случая, если вы хотите выполнить нормализацию, вычитая среднее значение для вашего массива. Вы можете использовать среднее значение трехмерного массива вместе с двумя осями, используя np.mean. Это даст вам масштабирующее значение, которое в дальнейшем вычитается из исходных значений.

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.

Далее вы можете нормализовать данные путем вычитания среднего значения и деления на его стандартное отклонение. Это много используется в приложениях машинного обучения.

...