TensorFlow — универсальный инструмент для создания моделей машинного обучения.
В этом посте мы рассмотрим, как создать систему распознавания лиц с помощью TensorFlow, среды машинного обучения с открытым исходным кодом. Мы рассмотрим основные процессы создания успешной системы распознавания лиц, от сбора и подготовки данных до обучения и оценки модели.
Вы получите непосредственный опыт работы с TensorFlow для создания распознавания лиц с помощью фрагментов кода и реальных примеров. Вы можете следить за тем, как мы продолжим.
Введение в TensorFlow
TensorFlow — это бесплатная библиотека с открытым исходным кодом. Это инструментарий символьной математики, использующий поток данных и дифференцируемое программирование. С ним можно решать целый ряд задач, включая глубокие нейронной сети обучение.
TensorFlow является мощным и адаптируемым. Кроме того, это отличный инструмент для разработки и развертывание моделей машинного обучения. Вы можете создавать сложные модели с несколькими слоями и тензорными операциями. Кроме того, предварительно созданные модели в библиотеке можно настроить под конкретные нужды.
Кроме того, TensorFlow имеет огромное и расширяющееся сообщество пользователей. Таким образом, существует множество информации и помощи для новичков на платформе.
TensorFlow популярен для обучение с помощью машины отчасти потому, что он обеспечивает сквозной рабочий процесс. Таким образом, вы можете легко создавать, обучать и развертывать модели. Он предоставляет инструменты и стратегии для улучшения и масштабирования моделей в соответствии с конкретными требованиями. Это варьируется от предварительной обработки данных до развертывания модели.
Что такое распознавание лиц?
Распознавание лиц — это компьютерное зрение задача, которая идентифицирует идентификацию человека на основе его лица. Этот метод распознает черты лица, такие как форма и структура глаз, носа и рта.
И он сравнивает их с базой данных известных лиц, чтобы определить соответствие. Распознавание лиц имеет несколько применений, включая системы безопасности, организацию фотографий и биометрическую аутентификацию.
В последние годы точность алгоритмов распознавания лиц значительно возросла в результате прорывов в машинном обучении.
Импорт необходимых библиотек
Прежде чем что-либо начинать, нам нужно импортировать библиотеки, необходимые для нашей модели. Tensorflow (tf) импортируется и используется для создания и обучения модели. <(р>
«numpy» выполняет математические расчеты и обработку данных.
«matplotlib.pyplot» импортируется как plt и используется для графическое представление данных и визуализация.
Наконец, «fetch lfw people» импортируется из sklearn. наборы данных и используется для загрузки набора данных распознавания лиц. Эта функция является частью набора инструментов scikit-learn. Благодаря этой функции нам не пришлось загружать еще один набор данных. Это уже встроено в sckit-learn.
И это дает вам доступ к широкому спектру наборы данных для машинного обучения Приложения. В этом сценарии мы используем метод fetch lfw people для получения набора данных «Labeled Faces in the Wild» (LFW). Он включает в себя фотографии лиц людей, а также ярлыки, которые идут с ними.
Эти библиотеки имеют решающее значение для реализации и оценки нашей модели распознавания лиц.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Предварительная обработка и загрузка набора данных распознавания лиц
В этой части мы используем функцию «выборки людей» для предварительной обработки данных распознавания лиц. Во-первых, мы используем fetch lfw people с опцией «минимум лиц на человека = 60». Это указывает на то, что мы хотим включить в набор данных только тех, у кого есть не менее 60 фотографий. Следовательно, мы гарантируем, что наша модель имеет адекватные данные для обучения. Кроме того, это снижает опасность переобучения.
Затем данные и метки из объекта лиц извлекаются и присваиваются переменным X и y. Х хол.
Теперь мы готовы обучить нашу модель распознавания лиц, используя предварительно обработанные данные и метки.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Разделение обучающих и тестовых наборов
На этом этапе мы разделили наш набор данных распознавания лиц на две половины, используя метод разделения тестов поезда из выбора sklearn.model. Цель этого разделения — оценить производительность нашей модели после обучения.
Функция разделения теста поезда принимает в качестве входных данных данные X и метки y. И разделяет их на обучающие и тестовые наборы. В этом примере мы выбираем размер теста = 0.2. Это означает, что 20% данных будут использоваться в качестве тестового набора, а 80% — в качестве обучающего набора. Кроме того, мы используем random state=42, чтобы гарантировать последовательное разделение данных при каждом выполнении кода.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Подготовка данных
Цель предварительной обработки данных состоит в том, чтобы подготовить их к вводу в модель. В этом коде данные предварительно обрабатываются путем деления каждой точки данных на 255.
Что побудило нас к этому? Нормализация — это процедура предварительной обработки, используемая в машинном обучении, чтобы гарантировать, что все функции находятся в одном масштабе. В этом сценарии деление на 255 масштабирует данные в диапазоне от 0 до 1, что является обычным шагом нормализации данных изображения.
Это ускоряет сходимость модели и может повысить ее производительность.
X_train = X_train / 255.0
X_test = X_test / 255.0
Создание режима
Мы хотим идентифицировать человека, чье лицо появляется на картинке. В этом случае мы будем использовать полносвязную сеть, часто известную как плотная сеть. Это искусственная нейронная сеть, которая использовалась для создания модели.
Искусственные нейронные сети моделируются по принципу работы и организации человеческого мозга. Они состоят из узлов обработки информации или нейронов, которые связаны между собой. Каждый нейрон в слое плотной сети связан с каждым нейроном в слое над ним.
Модель имеет четыре слоя в этом коде. Для передачи на следующий уровень входные данные выравниваются на первом уровне в одномерный массив. 128 и 64 нейрона в следующих двух слоях соответственно полностью сцеплены.
Функция активации ReLU — это уникальная функция активации, используемая этими слоями. При этом мы можем заставить модель изучать нелинейные корреляции между входными и выходными данными. Последний уровень использует функцию активации softmax для прогнозирования. И это полностью связанный слой с таким количеством нейронов, сколько существует потенциальных классов.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
Компиляция модели
Модель компилируется с помощью функции «compile». Нам нужно подготовить модель к обучению. Итак, мы определим оптимизатор, функцию потерь и метрики, которые будут использоваться для оценки модели.
Во время обучения оптимизатор отвечает за изменение параметров модели. Оптимизатор «адам» — популярный метод оптимизации с глубоким обучением.
Мы используем функцию потерь, чтобы оценить производительность модели на обучающих данных. Поскольку целевые метки представляют собой целые числа, отражающие класс изображения, а не векторы с горячим кодированием, функция потерь «разреженная категориальная кроссэнтропия» является благоприятной.
Наконец, мы определяем метрики для оценки модели, в данном случае «точность».
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Модельное обучение
Мы будем использовать функцию «подгонки» для обучения модели.
Мы будем предоставлять данные обучения (последовательность X) и соответствующие метки (поезд y), а также установим количество эпох (итераций) для запуска равным 10. Процедура обучения изменяет веса модели, чтобы уменьшить потери (разница между предсказанные и реальные метки) и повысить точность обучающих данных.
model.fit(X_train, y_train, epochs=10)
Оценка модели
Теперь нам нужно оценить обученную модель на тестовых данных. Мы используем тест потери и точность теста, которые используются для оценки производительности модели. Для тестовых данных X test и тестовых меток y test нам нужно вызвать «функцию model.evaluate».
Функция выводит точность теста и потери теста. Переменные Test loss и Test Точность соответственно содержат эти значения. Наконец, мы используем функцию «печать» для вывода точности теста.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Прогнозирование классов и получение прогнозируемых классов
Используя модель обучения и тестовые данные, алгоритм делает прогнозы. Когда тестовые данные передаются методу «model.predict», он выводит массив прогнозов для каждого изображения в тестовом наборе.
Затем имя целевого класса для каждого изображения извлекается из списка «целевые имена» с помощью функции «np.argmax», чтобы определить индекс с наибольшей прогнозируемой вероятностью. Затем этот индекс используется для определения прогнозируемого класса для каждого изображения.
Используя понимание списка, все прогнозы в массиве «предсказания» подвергаются этому методу, в результате чего получается список «прогнозируемых классов».
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Визуализация прогнозов
Теперь мы можем увидеть, как выглядит наша модель.
Чтобы оценить, насколько хорошо работает модель, будут показаны первые 10 фотографий и их прогнозы. Он будет отображать фотографии в оттенках серого и отображать как фактический класс изображения, так и класс, предсказанный моделью с использованием модуля matplotlib.pyplot.
Функция «imshow» используется циклом for для построения каждой из первых 10 фотографий тестового набора. Целевые имена[y test[i]] и прогнозируемые классы[i] используются для определения фактического класса изображения и прогнозируемого класса соответственно. Названия каждого сюжета затем обозначаются этими классификациями.
Наконец, график отображается с помощью метода plt.show().
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
Итоги
TensorFlow предлагает полную и гибкую среду для создания моделей машинного обучения.
Путем точной настройки модели в соответствии с конкретными требованиями или добавления новых разработок в области машинного обучения можно еще больше повысить точность модели.
Вероятно, в будущем TensorFlow и распознавание лиц будут все чаще использоваться в таких отраслях, как системы безопасности, биометрическая аутентификация и здравоохранение. Вскоре мы увидим интересные новшества.
Оставьте комментарий