Глава 4. Распознавание изображений и звуковых сигналов
163
Следующие две строки кода из листинга 4.1 добавляют в нашу сверточную сеть
два плотных слоя:
model.add(tf.layers.dense({units: 64, activation: 'relu'}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
Почему два плотных слоя, а не один? По той же причине, что и в примере с рас
познаванием цен на бостонскую недвижимость и примере с обнаружением фишин
говых URL из главы 3: чем больше слоев с нелинейной функцией активации, тем
выше разрешающие возможности модели. На самом деле эту сверточную нейронную
сеть можно считать состоящей из двух моделей, одна поверх другой.
z
z
Модель, включающая слои conv2d, maxPooling2d и слои схлопывания, выделя
ющие визуальные признаки из входных изображений.
z
z
MLP с двумя плотными слоями, выполняющий классификацию цифр на основе
выделенных признаков — именно для этого, по сути, служат два плотных слоя.
В глубоком обучении нередко встречается подобная архитектура, состоящая из
выделяющих признаки слоев, за которыми следуют многослойные перцептроны,
которые и производят итоговые предсказания. Далее мы рассмотрим еще много
аналогичных примеров, начиная от моделейклассификаторов аудиосигналов и до
обработки естественного языка.
4.2.5. Обучение сверточной сети
После успешного описания топологии сверточной сети необходимо ее обучить
и оценить качество результата обучения. Именно для этого предназначен код в ли
стинге 4.2.
Листинг 4.2.
Обучение сверточной сети MNIST и оценка качества ее работы
164
Часть II • Введение в TensorFlow.js
Значительная часть приведенного здесь кода посвящена обновлению UI в ходе
обучения, например для построения графика изменений значений потерь и безоши
бочности. Это удобно для мониторинга процесса обучения, но для самого обучения
модели значения не имеет. Отметим элементы этого кода, играющие важную роль
в самом обучении.
z
z
trainData.xs
(первый аргумент вызова
model.fit()
) содержит входные изо
бражения MNIST, представленные в виде тензора NHWC формы
[N,
28,
28,
1]
.
z
z
trainData.labels
(второй аргумент вызова
model.fit()
) содержит входные
метки, представленные в виде унитарного кодированного двумерного тензора
формы
[N,
10]
.
z
z
Используемая в вызове
model.compile()
функция потерь
categoricalCrossentropy
,
хорошо подходящая для таких задач многоклассовой классификации, как MNIST.
Напомним, что мы использовали ту же функцию в задаче классификации ирисов
в главе 3.
z
z
Заданная в вызове
model.compile()
функция метрики:
'accuracy'
. Она вычис
ляет, какая часть примеров данных классифицирована правильно, исходя из
предсказания на основе наибольшего из десяти элементов выходного сигнала
сверточной сети. Опять же это та же метрика, что и ранее, из задачи класси
фикации новостей. Напомним вам, в чем состоит различие между функцией
потерь на основе перекрестной энтропии и метрикой безошибочности: первая
дифференцируема, что открывает возможность для обучения на основе обратного
распространения ошибки, в то время как метрика безошибочности не дифферен
цируема, но более понятна для человека.
z
z
Задаваемый в вызове
model.fit()
параметр
batchSize
. Вообще говоря, пре
имущество большего размера батчей состоит в более согласованном и менее
подверженном изменениям градиентном обновлении весов модели, по сравне
нию с батчами меньшего размера. Но чем больше размер батчей, тем больше
оперативной памяти требуется при обучении. Учтите также, что при одинаковом
размере обучающих данных чем больше размер батчей, тем меньше градиент
Do'stlaringiz bilan baham: |