Делает ли нормализация изображений путем деления на 255 утечки информации между поездом и тестовым набором? - PullRequest
0 голосов
/ 26 апреля 2019

Я видел, как деление на 255 много раз использовалось в качестве нормализации в онлайн-учебниках по CNN, и это делается по всему набору данных до разделения теста поезда.

У меня сложилось впечатление, что тестовый набор должен быть нормализован в соответствии со средним / стандартным / максимальным и т. Д. Тренировочного набора. Используя / 255 по всему набору данных, очевидно, мы даем учебному набору представление о тестовом наборе. Это правда?

Какой правильный подход здесь?

Это:

x_train = (x_train - x_train_mean)/x_train_std
x_test = (x_test - x_test_mean)/x_test_std

или это:

x_train = (x_train - x_train_mean)/x_train_std
x_test = (x_test - x_train_mean)/x_train_std

или это:

data/255

Спасибо

Меня попросили предоставить справочную информацию о том, что я пробовал: это кажется неугодным, я не нашел обсуждения по этому поводу.

редактировать: просто еще одна мысль.

Поскольку и поезд, и тестовый набор уже находятся в одном масштабе (т. Е. Каждый пиксель от 0 до 255), я предполагаю, что деление на 255 не имеет значения, теперь они находятся в одном масштабе, но из 0 -1.

1 Ответ

2 голосов
/ 09 мая 2019

Ваше предположение верно, деление изображения на 255 просто изменяет масштаб изображения с 0-255 до 0-1. (Преобразование его в число с плавающей точкой из int также делает вычисление удобным). Однако, это не требуется. Однако при центрировании данных по нулю среднее значение не может попасть в набор для тестирования: (http://cs231n.github.io/neural-networks-2/#datapre)

x_train = (x_train - x_train_mean)

x_test = (x_test - x_train_mean)

Кроме того, вы можете использовать класс конвейера sklearn (https://scikit -learn.org / stable / modules / generate / sklearn.pipeline.Pipeline.html ) и использовать fit () и / или fit_transform ( ) методы для упрощения процесса. Если вы используете Keras, для этого есть оболочка

...