Рис. 5.6.
UI примера webcam-transfer-learning
1
После сбора обучающих изображений нажмите кнопку
Train Model
, чтобы запу
стить процесс переноса обучения. Он займет лишь несколько секунд. Вы увидите,
как значение выводимой на экране функции потерь падает до тех пор, пока не до
стигнет очень маленького положительного значения (например, 0,00010) и переста
нет меняться. В этот момент модель переноса обучения уже обучена и с ее помощью
можно играть. Для запуска игры просто нажмите кнопку
Play
и подождите, пока со
стояние игры не стабилизируется. После этого модель будет выводить результаты
в режиме реального времени для потока получаемых с вебкамеры изображений.
Для каждого кадра видео в нижнем правом углу UI будет выделяться яркожелтым
1
Созданием UI примера webcamtransferlearning мы обязаны Джимбо Уилсону и Шену
Картеру. Видеозапись этого развлекательного примера в действии вы можете найти по
адресу https://youtu.be/YBkfeNIPCE?t=941.
200
Часть II • Введение в TensorFlow.js
цветом класспобедитель (класс, которому модель присвоила максимальную веро
ятность). Кроме того, Пакман переместится в соответствующем направлении (если
ему не помешает стена).
Для незнакомых с машинным обучением эта демонстрация выглядит какимто
колдовством, но в ее основе лежит простой алгоритм переноса обучения, использу
ющий MobileNet для решения задачи четырехклассовой классификации. В алгорит
ме используется небольшое количество данных, собранных с помощью вебкамеры.
Вы маркируете эти изображения с помощью нажатия и удержания клавиши во время
сбора. Благодаря возможностям переноса обучения этот процесс не требует большо
го объема обучающих данных и не занимает много времени (может работать даже на
смартфоне). Вот как, по существу, работает данная демонстрация. Если же вам инте
ресны технические подробности, загляните далее вместе с нами в код TensorFlow.js.
Изучаем нюансы переноса обучения для веб-камеры
Базовую модель загружает код из листинга 5.3 (из файла
webcam-transfer-learning/
index.js
). В частности, мы загружаем версию MobileNet, подходящую для работы
в TensorFlow.js. В инфобоксе 5.1 описаны нюансы преобразования этой модели
из формата библиотеки глубокого обучения Keras Python в формат TensorFlow.js.
После загрузки модели мы используем метод
getLayer()
для получения ссылки на
один из ее слоев. Метод
getLayer()
позволяет обозначать слои по названию (в дан
ном случае
'conv_pw_13_relu'
). Наверное, вы помните и другой способ обращения
к слоям модели из подраздела 2.4.2 — путем индексации атрибута
layers
, в котором
все слои модели хранятся в виде JavaScriptмассива. Этот подход удобен лишь
тогда, когда модель состоит из относительно небольшого количества слоев. А наша
MobileNet включает 93 слоя, так что подобный подход в ее случае ненадежен (что,
если, например, в будущем в модель добавятся новые слои?). Надежнее будет вос
пользоваться подходом на основе названий и метода
getLayer()
, если допустить, что
авторы MobileNet не станут менять названия ключевых слоев при выпуске новых
версий модели.
Листинг 5.3.
Загрузка MobileNet и создание на ее основе «усеченной» модели
Do'stlaringiz bilan baham: |