Часть II • Введение в TensorFlow.js
в текущей главе и тем более для набора данных фишинговых сайтов и набора «Ири
сы Фишера», которые мы использовали в главе 3.
Можно с уверенностью сказать, что
ни в одной
настоящей задаче машинного об
учения не стоит рассчитывать на подобное везение. Львиную долю своего времени
специалисты по машинному обучению тратят на добывание, предварительную
обработку, очистку, проверку и форматирование данных
1
. В следующей главе мы
расскажем, какие утилиты существуют в TensorFlow.js для упрощения процессов
первичной обработки и ввода данных.
Упражнения
1. При обсуждении примера mnisttransfercnn в подразделе 5.1.1 мы упоминали,
что задание свойства
trainable
слоев модели не сыграет никакой роли при
обучении, если перед ним не вызвать метод
compile()
модели. Проверьте это
утверждение, внеся определенные изменения в метод
retrainModel()
файла
index.js
данного примера.
А. Вставьте перед строкой
this.model.compile()
вызов
this.model.summary()
и по
смотрите на количество обучаемых и необучаемых параметров. Что они показы
вают? И чем отличаются от тех, которые получаются после вызова
compile()
?
Б. Независимо от предыдущего пункта перенесите упомянутый вызов
this.mo-
del.compile()
прямо перед заданием свойства
trainable
слоев выделения
признаков. Другими словами, установите указанное свойство этих слоев
после вызова
compile()
. Как это повлияет на скорость обучения? Соот
ветствует ли эта скорость случаю, когда обновляются лишь несколько по
следних слоев модели? Можете ли вы подтвердить другими способами, что
в данном случае весовые коэффициенты первых нескольких слоев моделей
обновляются во время обучения?
2. Во время переноса обучения в подразделе 5.1.1 (см. листинг 5.1) мы заблоки
ровали первые два слоя conv2d, установив их свойство
trainable
равным
false
перед вызовом
fit()
. Добавьте в файл
index.js
примера mnisttransfercnn код
для проверки того, что вызов
fit()
действительно не меняет весов слоев conv2d.
Другой подход, с которым мы экспериментировали в том разделе, заключался
в вызове
fit()
без блокирования слоев. Проверьте, на самом ли деле весовые
коэффициенты слоев в данном случае меняются при вызове
fit()
. (Подсказка:
вспомните, что в подразделе 2.4.2 для доступа к значениям весовых коэффициен
тов мы использовали атрибут
layers
объекта модели и его метод
getWeights()
.)
3. Преобразуйте приложение MobileNetV2 (не MobileNetV1! Мы уже это сделали)
для Keras в формат TensorFlow.js и загрузите его в TensorFlow.js в браузере. Под
1
Press G.
Cleaning Big Data: Most TimeConsuming, Least Enjoyable Data Science Task,
Survey Says // Forbes, 23 Mar. 2016. http://mng.bz/9wqj.
Do'stlaringiz bilan baham: |