Я изучаю простейшие нейронные сети, используя плотные слои, используя Keras.Я пытаюсь реализовать распознавание лиц на относительно небольшом наборе данных (всего ~ 250 изображений с 50 изображениями в классе).
Я скачал изображения из картинок Google и изменил их размеры до 100 * 100 png
файлов.Затем я прочитал эти файлы в массив numpy
, а также создал один массив меток для обучения моей модели.
Вот мой код для обработки обучающих данных:
X, Y = [], []
feature_map = {
'Alia Bhatt': 0,
'Dipika Padukon': 1,
'Shahrukh khan': 2,
'amitabh bachchan': 3,
'ayushmann khurrana': 4
}
for each_dir in os.listdir('.'):
if os.path.isdir(each_dir):
for each_file in os.listdir(each_dir):
X.append(cv2.imread(os.path.join(each_dir, each_file), -1).reshape(1, -1))
Y.append(feature_map[os.path.basename(each_file).split('-')[0]])
X = np.squeeze(X)
X = X / 255.0 # normalize the training data
Y = np.array(Y)
Y = np.eye(5)[Y]
print (X.shape)
print (Y.shape)
Это печать (244, 40000)
и (244, 5)
.Вот моя модель:
model = Sequential()
model.add(Dense(8000, input_dim = 40000, activation = 'relu'))
model.add(Dense(1200, activation = 'relu'))
model.add(Dense(700, activation = 'relu'))
model.add(Dense(100, activation = 'relu'))
model.add(Dense(5, activation = 'softmax'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=25, batch_size=15)
Когда я тренирую модель, она застряла с точностью 0.2172
, что почти совпадает со случайными предсказаниями (0,20).
Я также пытался тренировать режим с изображениями в градациях серого, но все еще не достигал ожидаемой точности.Также пробовал с различными сетевыми архитектурами, изменяя количество скрытых слоев и нейронов в скрытых слоях.
Что мне здесь не хватает?Мой набор данных слишком мал?или я упускаю какие-либо другие технические детали?
Для получения более подробной информации о коде, вот моя записная книжка: https://colab.research.google.com/drive/1hSVirKYO5NFH3VWtXfr1h6y0sxHjI5Ey