Рекуррентная нейронная сеть python

Рекуррентная нейронная сеть python

3. Рекуррентные нейронные сети (Recurrent neural network/RNN):

Следующий вид искусственных нейронных сетей используется для предсказания последовательностей. Данные сети "понимают" взаимосвязь между разными элементами сети. Например, их используют для генерации текстов чат-ботами. Работает это так:

Принцип работы рекуррентной НС (взято тут)

В данном случае, сеть принимает последовательность "Привет, как дела?" и должна вывести: "Привет, нормально"

Я продемонстрирую работу таких сетей на простом примере.

International airline passengers: monthly totals in thousands. Jan 49 ? Dec 60
112
1 118
2 132
3 129
4 121

Набор данных включает в себя ежемесячные наблюдения за количеством пассажиров аэропорта с января 1949 по декабрь 1960. Всего имеется 144 наблюдения.

Если нарисовать график наблюдений, можно заметить определённую тенденцию:

Он цикличный, потому что наплывы пассажиров бывают в летний сезон.

Имеется положитлеьный тренд в общем количестве пасажиров, вездь популярность авиаперевозок постоянно растёт.

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

Для тренировки сети используются 96 наблюдений (67%), для проверки точности модели — 48 наблюдений.

Модель будет состоять из двух слоёв. Первый слой содержит всего 4 нейрона. Выходной слой — всего один нейрон, из которого будут "выходить" предсказанные количества пассажиров.

Загрузим данные в модель:

Оценим ошибку работы модели:

На тестовой выборке ошибка составила 0.11. Это значит, что модель в среднем ошибается на 11 тыс. пассажиров. Для того, чтобы понять, много это или нет, давайте визуализируем результат.

Итак, синим обозначен исходный график. Зелёное- это правильные предсказания на обученной выборке. Нас интересует красная чаcть — предсказания модели на тестовой выборке. Мы видим, что модель примерно угадывает годовые циклы и общий тренд.

Читайте также:  Как включить whatsapp на компьютере

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

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

Clone with HTTPS

Use Git or checkout with SVN using the web URL.

Downloading

Want to be notified of new releases in sozykin/dlpython_course ?

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

В этой статье опишем как минимальным средствами может быть создана и обучена нейронная сеть при помощи Python и библиотеки Keras.

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

Библиотека Keras представляет собой высокоуровневый интерфейс для создания нейронных сетей. Keras написан на Python и работает поверх таких более низкоуровневых решений, как TensorFlow, CNTK и Theano. За счет этого программный код получается не только мощным, но и крайне компактным.

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

  1. Число беременностей (все пациенты из источника – женщины не моложе 21 года индийской народности пима).
  2. Концентрация глюкозы в плазме через 2 часа после введения в пероральном глюкозотолерантном тесте.
  3. Диастолическое артериальное давление (мм рт. ст.).
  4. Толщина кожной складки в районе трицепса (мм).
  5. Концентрация инсулина в сыворотке крови (мкЕд/мл).
  6. Индекс массы тела (вес в кг/(рост в м)^2).
  7. Функция, описывающая генетическую предрасположенность к диабету (diabetes pedegree).
  8. Возраст (годы).
Читайте также:  Сколько пользователей в фейсбук 2018

Программный код и датасет также доступны на Github.

Библиотека Keras позволяет запускать нейронные сети с минимальным количеством операций. В качестве модели нейронной сети используется последовательная Sequental из модуля keras.models с заданием слоев keras.layers типа Dense.

Для последующей воспроизводимости результатов зафиксируем генератор случайных чисел при помощи функции random.seed() из библиотеки numpy. Считаем данные из датасета:

Разделим данные на матрицу признаков X и вектор целевой переменной Y (последний столбец датасета):

Создаем модель нейронной сети:

Опишем структуру модели нейронной сети. Определим входной, выходной и скрытые слои. Наша нейронная сеть будет иметь плотную (Dense) структуру – каждый нейрон связан со всеми нейронами следующего слоя. Выходной слой будет состоять из единственного нейрона, определяющего вероятность заболевания диабетом.

Слой добавляется к модели методом add(). Для входного слоя необходимо указать число признаков input_dim, равное в нашем случае 8:

Если наборы признаков образуют многомерную таблицу, то вместо параметра input_dim можно использовать параметр input_shape, принимающий кортеж с количеством элементов в каждом из измерений .

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

Создадим три скрытых слоя и один выходной слой нашей нейронной сети:

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

Перед тем, как начать тренировать модель, ее нужно скомпилировать при помощи метода compile():

Методу передается три параметра:

  • loss – функция потерь – объект, который модель стремиться минимизировать;
  • optimizer – оптимизатор, мы используем встроенный метод стохастической оптимизации adam, описанный в публикации Дедерика Кингма и Джимми Ба;
  • metrics – список метрик оптимизации, для задач классификации используется метрику ‘accuracy’.
Читайте также:  Varta type 57039 схема

Для обучения нейронной сети применяем метод fit():

Параметр epochs – "эпохи" – количество проходов нейронной сети по всем записям датасета (выбирается исходя из того, насколько быстро модель с каждым новым проходом приближается к желаемой предсказательной точности), batch_size – количество объектов выборки, берущихся за один шаг. В процессе обучения API будет выводить соответствующие строчки с величинам функции потерь и метрики для каждой из эпох.

Оценим результат обучения нейронной сети. Метод evaluate() возвращает значения функции потерь и метрики для обученной модели:

Последняя строчка в форматированном виде выводит точность прогноза по нашей модели для заданной метрики accuracy:

Наконец, полный код нейронной сети с комментариями приведен в листинге ниже:

Ссылка на основную публикацию
Разница между антирадаром и радар детектором
Размеры дорожных штрафов в последние годы неуклонно растут и содержание машины для рядового автовладельца становится очень накладной статьей расходов. Поэтому...
Пропал звук на смартбуке престижио
Здравствуйте. Никогда не думал, что со звуком может быть столько проблем! Неоспоримо, но это факт — достаточно большое количество пользователей...
Пропал интерфейс в фотошопе
На этой странице 某些 Creative Cloud 应用程序、服务和功能在中国不可用。 Проблема Некоторые инструменты отсутствуют на панели инструментов. Photoshop позволяет настраивать, какие инструменты отображаются...
Размытие при движении в играх
Motion blur (произносится: моушн блёр) — размытие изображения при повороте камеры, воспроизведении сцен движения или быстро движущихся объектов. Содержание В...
Adblock detector