1

Я пытаюсь классифицировать изображения (29 x 29), используя только 1 канал в Keras. Если средний пиксель находится в определенном диапазоне, тогда выход равен 1, если нет, то это 0.Двоичная классификация изображений в Keras

Для тренировочного набора У меня есть 10000 изображений с выходными 1 и 30000 изображений с выходом 0, и я использую следующие архитектура:

model = Sequential() 

# kernel = (4, 4); 6 outputmaps 26x26 
model.add(Convolution2D(6, 4, 4, input_shape=(img_channels, img_rows, img_columns))) 
model.add(Activation('relu')) 
# 6 outputmaps of 13x13 
model.add(MaxPooling2D(pool_size=(2, 2))) 
# 12 outputmaps of 10x10 ; kernel = (4, 4) 
model.add(Convolution2D(12, 4, 4)) 
model.add(Activation('relu')) 
# 12 outputmaps of 5x5 
model.add(MaxPooling2D(pool_size=(2, 2))) 
# 24 outputmaps of 4x4 ; kernel = (2, 2) 
model.add(Convolution2D(24, 2, 2)) 
model.add(Activation('relu')) 
model.add(Flatten()) 
model.add(Dense(1, activation='sigmoid')) 

Для компиляции, я использую binary_crossentropy потери

model.compile(loss='binary_crossentropy', optimizer='sgd', class_mode='binary') 

точность колеблется, но она достигает конечного значения 0,75 после каждой эпохи. Есть ли что-нибудь, что мне не хватает? Есть ли что-нибудь, что я должен изменить или добавить, чтобы это работало?

ответ

0

Пытаясь интерпретировать ваш подход, вы хотите, чтобы ваш CNN просмотрел только 1 из 29 * 29 пикселей. Я не эксперт, но это не похоже на хорошую проблему для CNN. Однако, как правило, если ваша сеть достигает плохих результатов в данных обучения, ваша сеть слишком мала. Поэтому вы можете попытаться сделать это больше. Еще одна вещь, о которой вы можете подумать: что на самом деле достигают ваши настройки (размер ядра, слои, объединение)? Могут ли ваши настройки быть плохими для такого рода задач? Вот что я хотел бы сделать:

  • попробовать это без CNN, т.е. использовать 1 или 2 полностью связный слой и посмотреть, что происходит
  • сделать разрешение «тоньше», размер т.е. использование (3,3) фильтр
  • удалить maxpooling (maxpooling отбрасывает информацию, чтобы сделать функции более инвариантно, я не вижу, что вы должны были бы это)
  • добавить больше CONV слоев
  • может быть не актуальна, но набор данных очень мало, так что вы не нуждаются в скоростном выигрыше sgd, идите вместо другого оптимизатора

Как именно выглядит ваша тренировка и тестирование? Это игрушечный проект?

+0

Почему это не было бы хорошей проблемой для cnn? – maz

Смежные вопросы