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

4.1.Классификация отзывов к фильмам    147

4.1.6.Дальнейшие эксперименты

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

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

.Попробуйте.использовать.слои.с.большим.или.с.меньшим.количеством. нейронов:.32.нейрона,.64.нейрона.и.т..д.

. Попробуйте.вместо.binary_crossentropy .применить.функцию.потерь.mse.

.Попробуйте.вместо.relu .использовать.функцию.активации.tanh .(она.была. популярна.на.заре.становления.нейронных.сетей).

4.1.7. Подведение итогов

Вот.какие.выводы.вы.должны.сделать.из.этого.примера.

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

.Стек.слоев.Dense.с.функцией.активации.relu.способен.решать.широкий.круг. задач.(включая.классификацию.настроений),.и.вы,.вероятно,.чаще.всего. будете.использовать.именно.эту.комбинацию.

.В.задаче.бинарной.классификации.(с.двумя.выходными.классами).в.конце. вашей.модели.должен.находиться.слой.Dense .с.одним.нейроном.и.функцией. активации.sigmoid:.результатом.работы.сети.должно.быть.скалярное.значение.в.диапазоне.между.0.и.1,.представляющее.вероятность.

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

.В.общем.случае.оптимизатор.rmsprop .является.наиболее.подходящим.выбором.для.любого.типа.задач..Одной.головной.болью.меньше.

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

148    Глава 4. Начало работы с нейронными сетями: классификация и регрессия

4.2. КЛАССИФИКАЦИЯ НОВОСТНЫХ ЛЕНТ:

ПРИМЕР КЛАССИФИКАЦИИ В НЕСКОЛЬКО КЛАССОВ

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

Ниже.мы.создадим.модель.для.классификации.новостных.лент.агентства.Reuters. на.46.взаимоисключающих.тем..Так.как.теперь.количество.классов.больше.двух,. эта.задача.относится.к.категории.задач.многоклассовой классификации..Каждый. экземпляр.данных.должен.быть.отнесен.только.к.одному.классу,.поэтому.наш. пример.является.однозначной многоклассовой классификацией..Если.бы.каждый. экземпляр.данных.мог.принадлежать.нескольким.классам.(в.данном.случае.темам),.эта.задача.была.бы.примером.многозначной многоклассовой классификации.

4.2.1. Набор данных Reuters

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

Подобно.IMDB.и.MNIST,.набор.данных.Reuters.поставляется.в.составе.Keras.. Давайте.заглянем.в.него.

Листинг 4.11. Загрузка данных Reuters

from tensorflow.keras.datasets import reuters

(train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=10000)

По.аналогии.с.примером.IMDB.аргумент.num_words=10000.ограничивает.данные. десятью.тысячами.наиболее.часто.встречающихся.слов.

Всего.у.нас.имеется.8982.обучающих.и.2246.контрольных.примеров:

>>>len(train_data)

8982

>>>len(test_data)

2246

По.аналогии.с.отзывами.в.базе.данных.IMDB.каждый.пример.—.это.список. целых.чисел.(индексов.слов):

>>>

train_data[10]

 

 

 

 

 

 

 

[1,

245,

273,

207, 156, 53, 74,

160,

26, 14,

46, 296, 26,

39, 74, 2979,

3554, 14,

46,

4689,

4329, 86,

61, 3499,

4795, 14, 61, 451, 4329, 17, 12]

4.2. Классификация новостных лент    149

Вот.как.можно.декодировать.индексы.в.слова.(если.это.вам.интересно).

Листинг 4.12. Декодирование новостей обратно в текст

[(value, key) for (key, value) in word_index.items()])

(неизвестно)

 

decoded_newswire = " ".join(

 

 

[reverse_word_index.get(i - 3, "?") for i in train_data[0]])

 

 

Обратите внимание, что индексы

 

смещены на 3, потому что индексы 0, 1

 

и 2 зарезервированы для слов padding

word_index = reuters.get_word_index()

(отступ), start of sequence (начало

reverse_word_index = dict(

последовательности) и unknown

Метка,.определяющая.класс.примера,.—.целое.число.между.0.и.45.—.это.индекс. темы:

>>> train_labels[10] 3

4.2.2. Подготовка данных

Для.векторизации.данных.можно.повторно.использовать.код.из.предыдущего. примера.

Листинг 4.13. Кодирование данных

Векторизованные x_train = vectorize_sequences(train_data) обучающие данные

x_test = vectorize_sequences(test_data) Векторизованные

контрольные данные

Векторизовать.метки.можно.двумя.способами:.сохранить.их.в.тензоре.целых. чисел.или.использовать.прямое кодирование..Прямое.кодирование.(one-hot. encoding).широко.используется.для.подготовки.категорийных.данных.и.также. называется.кодированием категорий.(categorical.encoding)..В.данном.случае. прямое.кодирование.меток.заключается.в.конструировании.вектора.с.нулевыми. элементами.и.значением.1.в.элементе,.индекс.которого.соответствует.индексу. метки..Пример.приведенв.листинге.4.14.

Листинг 4.14. Кодирование меток

def to_one_hot(labels, dimension=46):

results = np.zeros((len(labels), dimension))

for i, label in enumerate(labels):

 

results[i, label] = 1.

Векторизованные

return results

y_train = to_one_hot(train_labels)

 

обучающие метки

 

 

y_test = to_one_hot(test_labels)

 

Векторизованные

 

 

 

 

 

контрольные метки

150    Глава 4. Начало работы с нейронными сетями: классификация и регрессия

Следует.отметить,.что.этот.способ.уже.реализован.в.Keras:

from tensorflow.keras.utils import to_categorical y_train = to_categorical(train_labels)

y_test = to_categorical(test_labels)

4.2.3. Конструирование модели

Задача.классификации.по.темам.напоминает.предыдущую.задачу.с.отзывами:. в.обоих.случаях.мы.пытаемся.классифицировать.короткие.фрагменты.текста.. Но.теперь.количество.выходных.классов.увеличилось.с.2.до.46..Размерность. выходного.пространства.стала.намного.больше.

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

По.этой.причине.в.данном.примере.мы.будем.использовать.слои.с.большим. количеством.измерений..Давайте.выберем.64.нейрона.

Листинг 4.15. Определение модели

model = keras.Sequential([ layers.Dense(64, activation="relu"), layers.Dense(64, activation="relu"), layers.Dense(46, activation="softmax")

])

Отметим.еще.две.особенности.этой.архитектуры.

1.. Модель.завершается.слоем.Dense .размером.46..Это.означает,.что.для.каж- дого.входного.образца.модель.будет.выводить.46-мерный.вектор..Каждый. элемент.этого.вектора.(каждое.измерение).представляет.собой.отдельный. выходной.класс.

2.. Последний.слой.использует.функцию.активации.softmax..Мы.уже.видели. этот.шаблон.в.примере.MNIST..Он.означает,.что.модель.будет.выводить. распределение вероятностей.по.46.разным.классам.—.для.каждого.образца. на.входе.модель.будет.возвращать.46-мерный.вектор,.где.output[i].—.вероят- ность.принадлежности.образца.классу.i..Сумма.46.элементов.всегда.будет. равна.1.