Ну, есть ряд решений, которые нужно принять. Одним из них является разделение ваших изображений на тренировочный набор, набор для проверки и, как правило, также на набор тестов. Обычно я использую 10% изображений в качестве набора для проверки и 10% изображений в качестве тестового набора. Далее вам нужно решить, как вы хотите предоставлять свои изображения в сеть. Я предпочитаю использовать Keras ImageDataGenerator.flow из каталога. Это требует от вас создания 3 каталогов для хранения изображений. Я поместил тестовые изображения в каталог с именем «test», проверочные изображения - в каталог «valid», а обучающие изображения - в каталог «train». Теперь в каждом из этих каталогов вам нужно создать каталоги классов с одинаковыми именами. Например, если вы пытаетесь классифицировать изображения собак и кошек. Вы должны создать подкаталог 'dogs' и подкаталог 'cats' в тестовых, обучающих и допустимых каталогах. Обязательно назовите их одинаково, потому что имена подкаталогов определяют имена ваших классов. Теперь заполните каталоги классов своими изображениями. Это могут быть изображения в стандартных форматах, таких как JPG. Теперь создайте 3 генератора: генератор поездов, генератор проверки и генератор испытаний, как в
train_gen=ImageDataGenerator(preprocessing_function=pre_process).flow_from_directory('train', target_size=(height, width), batch_size=train_batch_size, seed=rand_seed, class_mode='categorical', color_mode='rgb')
, сделайте то же самое для генератора проверки и генератора испытаний. Документация для ImageDataGenerator и flow_from_directory здесь. . Теперь у вас есть сохраненные изображения и генераторы данных, настроенные для предоставления данных вашей модели в пакетном режиме в зависимости от размера пакета. Так что теперь мы можем приступить к созданию модели. Вы можете создать свою собственную модель, однако есть отличные модели для обработки изображений, доступные для вас. Это называется трансферным обучением. Мне нравится использовать модель под названием Mobil eNet. Я предпочитаю это, потому что он имеет небольшое количество обучаемых параметров (около 4 миллионов) по сравнению с другими моделями, которые имеют десятки миллионов. У Keras есть эта и многие другие модели обработки изображений. Документация здесь. Теперь вам нужно изменить последний слой модели, чтобы адаптировать его к вашему приложению. Mobil eNet прошел обучение на базе данных Imag eNet, в которой было 1000 классов. Вам нужно удалить этот последний слой и сделать его плотным слоем, имеющим столько узлов, сколько у вас есть классов, и использовать функцию активации softmax. Пример для случая 2 классов показан ниже.
mobile = tf.keras.applications.mobilenet.MobileNet( include_top=Top,
input_shape=(height,width,3),
pooling='avg', weights='imagenet',
alpha=1, depth_multiplier=1)
x=mobile.layers[-2].output
predictions=Dense (2, activation='softmax')(x)
model = Model(inputs=mobile.input, outputs=predictions)
for layer in model.layers:
layer.trainable=True
model.compile(Adam(lr=.001, loss='categorical_crossentropy', metrics=['accuracy'])
Последняя строка кода компилирует вашу модель с использованием оптимизатора Adam со скоростью обучения 0,001. Теперь мы, наконец, можем приступить к обучению модели , Я использую генератор модели соответствия, как показано ниже:
data = model.fit_generator(generator = train_gen,validation_data=val_gen, epochs=epochs, initial_epoch=start_epoch,
callbacks = callbacks, verbose=1)
Документация для вышеупомянутого здесь . Модель будет тренироваться на вашем тренировочном наборе и проверяться на валидационном наборе. Для каждой эпохи (цикла обучения) вы будете получать распечатки данных о потере обучения, точности обучения, потере проверки и точности проверки, чтобы вы могли отслеживать, как работает ваша модель. Последний шаг - запустить тестовый набор, чтобы увидеть, насколько хорошо ваша модель работает с данными, на которых она не была обучена. Для этого воспользуйтесь приведенным ниже кодом:
resultspmodel.evaluate(test_gen, verbose=0)
print('Model accuracy on Test Set is {0:7.2f} %'.format(results[1]* 100)
Вот и все, но, конечно, есть много деталей, которые нужно заполнить. Если вы новичок в Convolutional Neural Networks и машинном обучении, я бы порекомендовал отличный учебник на YouTube по адресу здесь. В списке воспроизведения есть около 20 последовательных обучающих программ. Я использовал этот урок как новичок и нашел его превосходным. В нем будут рассмотрены все темы, необходимые для освоения использования классификаторов CNN. Удачи!