Часть II • Введение в TensorFlow.js
естественного языка существуют вложения слов (векторные представления всех
часто встречающихся слов языка), обученные на огромных корпусах текста из мил
лиардов слов. Эти вложения очень удобны для задач понимания языка, в которых
доступны лишь намного меньшие текстовые наборы данных. А теперь наконец
взглянем на пример того, как перенос обучения работает на практике.
5.1.1. Перенос обучения при совместимых формах
выходных сигналов: блокировка слоев
Начнем с относительно простого примера: обучим сверточную сеть на пяти первых
цифрах набора данных MNIST (от 0 до 4). Затем воспользуемся полученной моде
лью для распознавания оставшихся пяти цифр (от 5 до 9), которые модель не видела
во время первоначального обучения. Несмотря на некоторую искусственность, этот
пример хорошо иллюстрирует основной технологический процесс переноса об
учения. Получить и запустить код примера можно с помощью следующих команд:
git clone https://github.com/tensorflow/tfjs-examples.git
cd tfjs-examples/mnist-transfer-cnn
yarn && yarn watch
На открывшейся демостранице запустите процесс обучения, нажав кнопку
Retrain
.
Вы увидите, как обучение достигает безошибочности 96 % на новом наборе из пяти
цифр (от 5 до 9), что на относительно мощном ноутбуке занимает около 30 секунд —
это намного быстрее, чем вариант без переноса обучения (а именно, обучение новой
модели с нуля). Взглянем, как это реализовано, шаг за шагом.
Чтобы не отвлекать ваше внимание от ключевых этапов технологического про
цесса, в примере мы загружаем предобученную базовую модель с HTTPсервера, вме
сто того чтобы обучать ее с нуля. Как вы помните из подраздела 4.3.3, TensorFlow.js
предоставляет метод
tf.loadLayersModel()
для загрузки предобученных моделей.
Вызываем этот метод в файле
loader.js
:
const model = await tf.loadLayersModel(url);
model.summary();
Сводка топологии модели выглядит так, как показано на рис. 5.2. Как видите,
модель состоит из 12 слоев
1
. Все ее 600 000 или около того весовых параметров —
обучаемые, как и во встречавшихся нам ранее моделях TensorFlow.js. Обратите
1
Возможно, вы еще не сталкивались со слоями активации, присутствующими в этой модели.
Слои активации — это простые слои, всего лишь применяющие к входному сигналу функ
цию активации (например, ReLU или многомерную логистическую функцию активации).
Пусть дан плотный слой с функцией активации по умолчанию (линейной); присоединение
к нему слоя активации эквивалентно использованию плотного слоя с соответствующей
функцией активации (не той, что по умолчанию). Именно это мы и делали в примерах из
главы 4, но на практике встречаются оба варианта. В TensorFlow.js подобную топологию
можно создать с помощью следующего кода: const model = tf.sequential(); model.add(tf.layers.
dense({untis: 5, inputShape})); model.add(tf.layers.activation({activation: ‘relu’}).
Do'stlaringiz bilan baham: |