В течение последних 2 месяцев я пытался создать классификационную модель, которая могла бы различать меня и других людей с Керасом.Я начал с классификатора «собаки против кошек» и подставил набор данных.С тех пор я настроил сеть и набор данных с некоторым успехом.Кроме того, я попытался увеличить свой набор данных во многих различных комбинациях (зеркально отразить, повернуть, оттенки серого, осветлить и затемнить гамму; мое увеличение превращает 1 изображение в 9).
Для обучения я использую веб-камеру моего ноутбука для захватамое лицо в разных ориентациях и углах, и затем я разделил его на 3 (1/3 для проверки и 2/3 для обучения).Для отрицательных примеров у меня есть другой набор данных случайных людей, разделенных таким же образом.
Для проверки моей модели я используюнекоторые семейные фотографии, на которых я достиг точности около 80%, но для этого я использую только 60 фотографий, из которых 36 - мои собственные.
img_width, img_height = 150, 150
if K.image_data_format() == 'channels_first':
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True
)
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
print(train_generator.class_indices)
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
print(validation_generator.class_indices)
model.fit_generator(
train_generator,
steps_per_epoch=train_samples // batch_size,
epochs=epochs,
callbacks=[tensorboard],
validation_data=validation_generator,
validation_steps=validation_samples // batch_size)
model.save('model.h5')
Все мои попытки тренировок проходят примерно одинаково.Первые 1-2 эпохи имеют близкие значения acc и loss, а следующие переходят к acc: 0,9 с потерей: 0,1.
Я предполагаю, что проблема в наборе данных.Что я должен сделать, чтобы достичь разумной степени или точности, только используя фотографии, сделанные веб-камерой?