CNN на Keras сходятся к одному и тому же значению независимо от ввода - PullRequest
0 голосов
/ 30 июня 2018

Я недавно изучал Keras и попробовал свои силы в наборе данных CIFAR10 с CNN. Однако модель, которую я обучил (вы можете запустить код здесь ), возвращает тот же ответ для каждого ввода, несмотря ни на что. Я что-то забыл в определении модели?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Вы забыли нормализовать изображения. В настоящее время значения в x_train находятся в диапазоне [0,255]. Это вызывает большие обновления градиента и останавливает процесс обучения. Одна простая схема нормализации в этом случае будет:

x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

Это приводит к тому, что значения попадают в диапазон [0,1]. Тогда вы наверняка увидите, что тренировка прогрессирует.


Более сложная схема нормализации включает в себя функциональную (то есть пиксельную) нормализацию или центрирование. При таком подходе мы нормализуем все изображения таким образом, чтобы каждый пиксель на всех изображениях имел среднее значение, равное нулю, и стандартное отклонение, равное единице (то есть они в основном попадают в диапазон [-1,1]):

# make sure values are float
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')

x_mean = x_train.mean(axis=0)
x_train -= x_mean
x_std = x_train.std(axis=0)
x_train /= x_std + 1e-8  # add a small constant to prevent division by zero

# normalize test data using the mean and std of training data
x_test -= x_mean
x_test /= x_std + 1e-8

Обратите внимание на последнюю часть: НИКОГДА НИКОГДА нормализовать тестовые данные по своим собственным средним и стандартным значениям. Вместо этого используйте обучающее среднее и стандартное.

0 голосов
/ 30 июня 2018

вы делаете прогноз на x_test

predictions = model.predict_classes(x_test, batch_size=50)

и чем сравнивать их с y_train

comparison = [(predictions[i], y_train_[i][0]) for i in range(0, len(predictions))]

Я думаю, это должно быть y_test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...