2016-08-26 11 views
0

Я запускаю сверточную нейронную сеть (this one) на кучу моих собственных данных изображения с формой (количество каналов, высота, ширина) = (3, 30, 30)). У меня есть 76960 учебных образцов, 19240 тестовых образцов и 39 классов. Последние несколько блоков кода являются:Точность валидации сверточной нейронной сети Keras не меняется

# Train the model using Stochastic grad descent + momentum 
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) 
cnn.compile(loss='categorical_crossentropy', 
      optimizer=sgd, 
      metrics=['accuracy']) 


batch_size = 128 
nb_epoch = 50 

cnn.fit(x_train, y_train, 
     batch_size = batch_size, 
     nb_epoch = nb_epoch, 
     validation_data=(x_test, y_test), 
     shuffle=True) 

потеря Обучения и изменение точности на протяжении эпох, но точность проверки только изменений по сравнению с 1-го по 2-й эпохе (от 0.3387 до 0.3357), а затем он остается на 0.3357 все путь.

Я попытался различного размером партии (32, 128 или 256), learning rate (от 1e-6 до 0,1, при умножении на 10 вдоль пути) и пытался с или без data normalization (основного среднего сдвига и деления по sd). Ни одна из них не сработала.

+0

Вы тестируете другие классификаторы? если да, то какая лучшая точность вы получаете по разному классификатору? – Masoud

+0

Как сбалансированы ваши классы? Любой класс, у которого больше образцов, чем у других? –

+0

1. Да, я пробовал другие классификаторы. 2. Нет, 2 из классов сильно перепредставлены, занимая около 34% и 35% от общей численности населения. Однако обратите внимание, что мой вопрос на самом деле не «как получить метод X, чтобы точно классифицировать мои данные». Я не уверен, что ярлыки, которые мне дали, даже правильны, поэтому неспособность классифицировать все равно может быть точным результатом, который отражает реальность. Меня просто беспокоит техническая ошибка. – AndreyIto

ответ

0

Не случайно, что процентная точность, которую вы застреваете (33,5%), такая же, как процент примеров, попадающих в доминирующий класс (вы заявили «около 34%» - это почти наверняка 33,5%).

Проблема в том, что Вы не регулируете данные вашего изображения.. Если ваши значения пикселей от 1 до 255, ваша модель навсегда застрянет, предсказывая один и тот же класс каждый раз. Чтобы убедиться, что это происходит, используйте model.predict(x_train) и посмотрите, что предсказывает ваша модель. Я готов поспорить, что это абсолютно единообразно, и что это всегда класс, который составляет 34% ваших данных.

Чтобы устранить эту проблему, просто нормализуйте свои данные - разделите x_train на 255, прежде чем начинать обучение модели.

x_train = x_train/255.0 
Смежные вопросы