Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

126    Глава 3. Введение в Keras и TensorFlow

Обратите.внимание:.автоматическое.определение.формы.не.единственное,.что. может.метод.__call__().класса.Layer..Он.также.решает.множество.других.задач,. в.частности.делает.выбор.между.жадным.(немедленным).и.графовым.(с.этим. понятием.вы.познакомитесь.в.главе.7).выполнением,.а.также.накладывает. маску.на.входные.данные.(об.этом.рассказывается.в.главе.11)..Пока.просто. запомните:.приступая.к.реализации.собственных.слоев,.описывайте.прямой. проход.в.методе.call().

3.6.2. От слоев к моделям

Модель.глубокого.обучения.является.графом.слоев..В.Keras.модели.представляют.собой.экземпляры.класса.Model..К.настоящему.моменту.вы.видели.только. последовательные.модели.Sequential .(подкласс.класса.Model).—.простой.стек. слоев,.отображающих.единственный.вход.в.единственный.выход..Однако.по. мере.движения.вперед.вам.встретится.намного.более.широкий.спектр.топологий. сетей..Вот.некоторые.из.них:

. сети.с.двумя.ветвями.(two-branch.networks);

. многоголовые.сети.(multihead.networks);

. входные.блоки.(inception.blocks).

Сети.могут.иметь.весьма.сложную.топологию..Например,.на.рис..3.9.показана. топология.графа.слоев.Transformer.—.универсальной.архитектуры.для.обработки. текстовых.данных.

Вообще,.в.Keras.существует.два.способа.создания.таких.моделей:.можно.напрямую.создать.подкласс.класса.Model.или.использовать.функциональный.API,. позволяющий.делать.больше.с.меньшим.количеством.кода..Мы.рассмотрим.оба. подхода.в.главе.7.

Топология.сети.определяет.пространство гипотез..Вспомните,.как.в.главе.1.мы. установили,.что.машинное.обучение.—.это.«поиск.значимого.представления. некоторых.входных.данных.в.предопределенном.пространстве возможностей. с.использованием.сигнала.обратной.связи»..Выбирая.топологию.сети,.вы.ограничиваете.пространство.возможностей.(пространство.гипотез).определенной. последовательностью.операций.с.тензорами,.отображающими.входные.данные. в.выходные..Ваша.задача.затем.—.найти.хороший.набор.значений.для.весовых. тензоров,.вовлеченных.в.эти.операции.с.тензорами.

Для.обучения.на.данных.необходимы.предположения.—.они.определяют,.чему. можно.обучиться..Поэтому.структура.пространства.гипотез.—.архитектура.мо- дели.—.чрезвычайно.важна..Она.кодирует.предположения.о.решаемой.задаче,. предварительные.знания,.с.которых.начинается.модель..Например,.при.работе.

3.6. Анатомия нейронной сети: знакомство с основами Keras    127

над.задачей.классификации.двух.классов.выбор.модели,.состоящей.из.одного. плотного.слоя.без.активации.(чистое.аффинное.преобразование),.предполагает,. что.два.класса.линейно.разделимы.

Рис. 3.9. Архитектура Transformer (будет рассмотрена подробнее в главе 11). Здесь много интересного. В следующих нескольких главах вы приблизитесь к ее пониманию

Выбор.правильной.архитектуры.сети.—.больше.искусство,.чем.наука;.и.хотя.есть. несколько.проверенных.методов.и.принципов,.на.которые.можно.положиться,. только.практика.может.помочь.вам.стать.опытным.архитектором.нейронных. сетей..В .следующих .главах .вы .познакомитесь .с .отдельными .принципами.

128    Глава 3. Введение в Keras и TensorFlow

конструирования.нейронных.сетей.и.получите.базовое.представление.о.том,.что. подходит.или.не.подходит.для.решения.конкретных.задач..Вы.поймете,.какие. типы.архитектур.моделей.пригодны.для.тех.или.иных.задач,.как.сконструировать.эти.модели.на.практике,.как.выбрать.правильную.конфигурацию.обучения. и.как.настроить.модель,.чтобы.получить.желаемые.результаты.

3.6.3. Этап «компиляции»: настройка процесса обучения

После .того .как .вы .определились .с .архитектурой .сети, .нужно .выбрать .еще. три.параметра:

.функцию потерь.(целевую функцию).—.количественную.оценку,.которая.будет. минимизироваться.в.процессе.обучения..Представляет.собой.меру.успеха. в.решении.стоящей.задачи;

.оптимизатор.—.определяет,.как.будет.изменяться.сеть.под.воздействием. функции.потерь..Реализует.конкретный.вариант.стохастического.градиентного.спуска.(Stochastic.Gradient.Descent,.SGD);

.метрики.—.показатели.успеха.(такие.как.точность.классификации),.за.кото- рыми.будет.вестись.наблюдение.во.время.обучения.и.проверки..Обучение,. в.отличие.от.потерь,.не.оптимизируется.по.данным.показателям.напрямую..

Поэтому.от.метрик.не.требуется,.чтобы.они.были.дифференцированными.

После.выбора.функции.потерь,.оптимизатора.и.метрик.можно.использовать. встроенные.методы.compile() .и.fit(),.чтобы.начать.обучение.модели..При.же- лании.можно.также.реализовать.собственные.циклы.обучения.—.мы.расскажем,. как.это.сделать,.в.главе.7..Придется.приложить.очень.много.усилий!.Пока.же. давайте.взглянем.на.compile() .и.fit().

Метод.compile().настраивает.процесс.обучения.—.вы.уже.познакомились.с.ним. в.самом.первом.примере.нейронной.сети.в.главе.2..Он.принимает.аргументы. с.оптимизатором,.функцией.потерь.и.метриками.(в.виде.списка):

 

Определение линейного

 

 

 

 

 

 

 

 

 

классификатора

 

 

Определение оптимизатора

 

 

 

 

 

model = keras.Sequential([keras.layers.Dense(1)])

 

 

 

 

по имени: RMSprop (регистр

model.compile(optimizer="rmsprop",

 

 

 

 

 

 

имеет значение)

 

 

 

 

 

 

 

loss="mean_squared_error",

 

Определение

 

 

 

metrics=["accuracy"])

 

 

 

 

 

 

 

функции по имени:

 

 

 

Определение списка метрик: в данном

 

 

среднеквадратичная ошибка

 

 

 

 

 

 

 

 

случае только accuracy (точность)

 

 

 

 

 

 

 

 

В .этом .примере .методу .compile() .оптимизатор, .функция .потерь .и .список .метрик .передаются .в .виде .строковых .имен .(например, ."rmsprop")..

3.6. Анатомия нейронной сети: знакомство с основами Keras    129

В.действительности.данные.строки.являются.ярлыками,.преобразующимися .в .объекты .Python..Например, ."rmsprop" .превращается .в .keras.optimi­ zers.RMSprop()..Важно .помнить, .что .вместо .строк .можно .также .передать. экземпляры.объектов,.например:

model.compile(optimizer=keras.optimizers.RMSprop(),

loss=keras.losses.MeanSquaredError(),

metrics=[keras.metrics.BinaryAccuracy()])

Это.удобно.тем,.кто.хочет.использовать.собственные.функции.потерь.или.метрики.или.желает.выполнить.дополнительную.настройку.применяемых.объектов,. например.передать.аргумент.learning_rate .оптимизатору:

model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=1e-4), loss=my_custom_loss,

metrics=[my_custom_metric_1, my_custom_metric_2])

В.главе.7.вы.узнаете,.как.создавать.свои.функции.потерь.и.метрики..В.общем. случае.нет.необходимости.прописывать.функции.потерь,.метрики.или.оптимизаторы.с.нуля,.поскольку.Keras.предлагает.широкий.спектр.встроенных.опций,. среди.которых.наверняка.найдется.то,.что.вам.нужно:

.оптимизаторы:

. SGD .(с.импульсом.или.без);

. RMSprop;

. Adam;

. Adagrad .и.др.;

.функции.потерь:

. CategoricalCrossentropy;

. SparseCategoricalCrossentropy;

. BinaryCrossentropy;

. MeanSquaredError;

. KLDivergence;

. CosineSimilarity .и.др.;

.метрики:

. CategoricalAccuracy;

. SparseCategoricalAccuracy;

. BinaryAccuracy;