Глава 5. Перенос обучения: переиспользование предобученных нейронных сетей
207
усеченной MobileNet. К счастью, у нас уже есть эти тензоры вложений (см. ли
стинг 5.4). Все, что нам осталось сделать для обучения новой верхушки, — вызвать
ее метод
fit()
, передав ему тензоры вложений. Выполняющий это код расположен
внутри функции
train()
в файле
index.js
и несложен, и мы не станем на нем оста
навливаться.
Рис. 5.8.
Схематическое описание алгоритма машинного обучения, лежащего в основе примера
webcam-transfer-learning
По завершении переноса обучения усеченная модель и новая верхушка вместе
позволяют нам получить оценки вероятностей для входных изображений с веб
камеры. Соответствующий код можно найти в функции
predict()
в файле
index.js
,
приведенной в листинге 5.6. В частности, в нем выполняются два вызова
predict()
,
первый из которых преобразует тензор изображения в его вложение с помощью
усеченной MobileNet, а второй преобразует вложение в оценки вероятностей четы
рех направлений с помощью новой верхушки, обученной путем переноса обучения.
Дальнейший код из листинга 5.6 служит для получения индексапобедителя (инде
кса, соответствующего максимальной оценке вероятности для четырех направлений)
и направления соответствующим образом движения Пакмана с обновлением со
стояния UI. Как и в предыдущих примерах, мы не станем описывать часть примера,
относящуюся к UI, поскольку для нашего обсуждения алгоритмов машинного об
учения она не столь важна. Можете изучить код UI и поэкспериментировать с ним,
воспользовавшись кодом из листинга 5.6.
208
Часть II • Введение в TensorFlow.js
Листинг 5.6.
Получаем предсказание для входного изображения с веб-камеры с помощью
переноса обучения
На этом мы завершаем обсуждение части примера webcamtransferlearning,
связанной с алгоритмом переноса обучения. Любопытный нюанс метода, приме
нявшегося в этом примере: в процессе обучения и вывода участвуют два отдельных
объекта моделей. Это удобно для иллюстрации того, как получить вложения из
промежуточных слоев предобученной модели. Еще одно преимущество данного
подхода: доступность вложений, благодаря чему упрощается применение напря
мую использующих их методик ML. Один из примеров подобных методик —
метод
k-ближайших соседей
(knearest neighbors, kNN, обсуждается в инфобоксе 5.2). Впро
чем, возможность прямого доступа к вложениям по некоторым причинам может
рассматриваться и как недостаток.
z
z
Некоторое усложнение кода. Например, выполнение вывода для каждого изо
бражения требует двух вызовов
predict()
.
z
z
Пусть нам нужно сохранить модели для использования в будущем или для пре
образования в формат какойлибо другой библиотеки, не TensorFlow.js. В этом
случае необходимо сохранять усеченную модель и новую верхушку модели от
дельно, как два отдельных артефакта.
z
z
В особых случаях перенос обучения включает обратное распространение ошибки
по определенным частям базовой модели (например, по первым нескольким сло
ям усеченной MobileNet). Это будет невозможно, если базовая модель и верхушка
представляют собой два отдельных объекта.
В следующем подразделе мы покажем, как можно преодолеть эти ограничения
путем формирования единого объекта модели для переноса обучения. Такая модель
будет сквозной в том смысле, что будет преобразовывать входные данные в исходном
формате в желаемый итоговый выходной сигнал.
Do'stlaringiz bilan baham: |