Шаг 103.
Глубокое обучение на Python. ... . Классификация новостных лент: пример классификации в несколько классов. Конструирование модели

    На этом шаге мы рассмотрим особенности создания такой модели.

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

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

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


Пример 4.15. Определение модели
from tensorflow import keras
from tensorflow.keras import layers

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.

    Лучшим претендентом на роль функции потерь в данном случае является функция categorical_crossentropy. Она определяет расстояние между распределениями вероятностей: в данном случае между распределением вероятности на выходе модели и истинным распределением меток. Минимизируя расстояние между этими двумя распределениями, мы учим модель выводить результат, максимально близкий к истинным меткам.


Пример 4.16. Компиляция модели
model.compile(optimizer="rmsprop",
              loss="categorical_crossentropy",
              metrics=["accuracy"]
              )

    На следующем шаге мы рассмотрим проверку решения.




Предыдущий шаг Содержание Следующий шаг