5 шагов к построению нейронных сетей в Keras

Программа перевода самородков Keras алгоритм Нейронные сети
5 шагов к построению нейронных сетей в Keras

5 шагов к построению нейронных сетей в Keras

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

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

Прочитав эту статью, вы узнаете:

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

  • Обновление марта 2017 г.: Обновите пример до Keras 2.0.2/TensorFlow 1.0.1/Theano 0.9.0.

Keras 中构建神经网络的 5 个步骤
5 шагов к построению нейронных сетей в Keras

Авторские права на титульное изображение принадлежатMartin Stitchenerвсе.

Обзор

Ниже представлен обзор 5 шагов, которые мы рассмотрим для построения модели нейронной сети в Keras.

  1. Определите сеть.
  2. Скомпилируйте сеть.
  3. Обучите сеть.
  4. Оцените сеть.
  5. Делать предсказания.

Keras 中构建神经网络的 5 个步骤
5 шагов к построению нейронных сетей в Keras

5 шагов к построению нейронных сетей в Keras

Хотите узнать больше о глубоком обучении с помощью Python?

Подпишитесь бесплатно на 2 недели, получайте мои электронные письма и исследуйте MLP, CNN и LSTM! (с образцом кода)

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

Нажмите здесь, чтобы начать свой маленький урок!

Шаг 1. Определите сеть

Первое, что нужно сделать, это определить вашу нейронную сеть.

В Keras нейронная сеть может быть определена серией слоев. Контейнером для этих слоев является класс Sequential. (Аннотация: последовательная модель)

Первое, что нужно сделать, это создать экземпляр класса Sequential. Затем вы можете создать нужные вам сетевые слои в том порядке, в котором слои соединены.

Например, мы можем сделать следующие два шага:

model = Sequential()
model.add(Dense(2))

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

layers = [Dense(2)]
model = Sequential(layers)

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

Например, мы хотим определить небольшую многослойную модель персептрона с 2 входными данными в видимом слое, 5 нейронами в скрытом слое и 1 нейроном в выходном слое. Эту модель можно определить следующим образом:

model = Sequential()
model.add(Dense(5, input_dim=2))
model.add(Dense(1))

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

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

model = Sequential()
model.add(Dense(5, input_dim=2))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))

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

Например, вот некоторые часто используемые типы задач прогнозного моделирования, а также их структуры и стандартные функции активации, которые можно использовать в выходном слое:

  • проблема регрессии: Используйте линейную функцию активации «linear» и используйте количество нейронов, соответствующее количеству выходов.
  • проблема бинарной классификации: Используйте функцию логистической активации «сигмоид» только с одним нейроном в выходном слое.
  • Проблема мультиклассификации: Используйте функцию активации Softmax «softmax»; если вы используете формат вывода с горячим кодированием, каждый выход соответствует одному нейрону.

Шаг 2: Скомпилируйте сеть

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

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

Вы можете думать о процессе компиляции как о предварительном вычислении вашей сети.

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

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

В следующем примере компилируется определенная модель для задачи регрессии, задающая алгоритм оптимизации стохастического градиентного спуска (sgd) и среднеквадратичную ошибку (mse) в виде функции.

model.compile(optimizer='sgd', loss='mse')

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

Например, вот стандартные функции потерь для нескольких различных типов прогнозного моделирования:

  • проблема регрессии: Среднеквадратическая ошибка"mse".
  • проблема бинарной классификации: потеря журнала (также известная как перекрестная энтропия) "_binarycrossentropy".
  • Проблема мультиклассификации: Многоклассовая потеря журнала "_categoricalcrossentropy".

ты можешь проверитьФункции потерь, поддерживаемые Keras.

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

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

  • Стохастический градиентный спуск"sgdПараметры скорости обучения и импульса необходимо скорректировать.
  • ADAM"adam«Скорость обучения должна быть настроена.
  • RMSprop"rmsprop«Скорость обучения должна быть настроена.

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

Например:

model.compile(optimizer='sgd', loss='mse', metrics=['accuracy'])

Шаг 3: Обучите сеть

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

Обучение сети требует формулирования обучающих данных, включая входную матрицу X и соответствующий выход y.

На этом этапе сеть обучается с использованием алгоритма обратного распространения и оптимизируется с использованием алгоритма оптимизации и функции потерь, указанных во время компиляции.

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

Каждую эпоху можно разделить на наборы пар входных и выходных данных, которые также называются пакетами (размером пакета). Число, установленное пакетом, будет определять количество пар ввода-вывода до обновления весов в каждую эпоху. Этот подход также является эффективным способом гарантировать, что слишком много пар ввода-вывода не загружается в память (видеопамять) одновременно.

Ниже приведен пример простейшей обучающей сети:

model.compile(optimizer='sgd', loss='mse', metrics=['accuracy'])

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

Шаг 4. Оцените сеть

После того, как сеть обучена, ее можно оценить.

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

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

При оценке модели будут оцениваться значения потерь для всех пар ввода-вывода в тестовом наборе, а также другие показатели (например, точность классификации), указанные во время компиляции модели. Этот шаг вернет набор результатов оценки индекса.

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

loss, accuracy = model.evaluate(X, y)

Шаг 5: Делайте прогнозы

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

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

Например:

predictions = model.predict(x)

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

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

Для задачи бинарной классификации прогнозируемое значение может быть набором значений вероятности, которые описывают вероятность того, что данные попадут в первый класс. Эти значения вероятности можно преобразовать в 0 и 1 путем округления (K.round).

Для задач множественной классификации результатом также может быть набор значений вероятности (при условии, что выходная переменная является однократным кодированием), поэтому также необходимо использоватьфункция argmaxПреобразуйте эти массивы вероятностей в желаемый одноклассовый выход.

End-to-End Worked Example

Объединим все вышесказанное на небольшом примере.

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

Задача имеет 8 входных переменных и должна выводить категориальное значение 0 или 1.

Мы построим многослойную нейронную сеть персептрона с видимым слоем из 8 входов, скрытым слоем из 12 нейронов, функцией активации выпрямителя, выходным слоем из 1 нейрона и сигмовидной функцией активации.

Мы будем обучать сеть на 100 эпох с размером пакета 10, используя алгоритм оптимизации ADAM и логарифмическую функцию потерь.

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

Полный код выглядит следующим образом:

# Keras 多层感知机神经网络样例
from keras.models import Sequential
from keras.layers import Dense
import numpy
# 加载数据
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
X = dataset[:,0:8]
Y = dataset[:,8]
# 1. 定义网络
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 2. 编译网络
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 3. 训练网络
history = model.fit(X, Y, epochs=100, batch_size=10)
# 4. 评价网络
loss, accuracy = model.evaluate(X, Y)
print("\nLoss: %.2f, Accuracy: %.2f%%" % (loss, accuracy*100))
# 5. 进行预测
probabilities = model.predict(X)
predictions = [float(round(x)) for x in probabilities]
accuracy = numpy.mean(predictions == Y)
print("Prediction Accuracy: %.2f%%" % (accuracy*100))

Запустив образец, вы получите следующий вывод:

...
768/768 [==============================] - 0s - loss: 0.5219 - acc: 0.7591
Epoch 99/100
768/768 [==============================] - 0s - loss: 0.5250 - acc: 0.7474
Epoch 100/100
768/768 [==============================] - 0s - loss: 0.5416 - acc: 0.7331
32/768 [>.............................] - ETA: 0s
Loss: 0.51, Accuracy: 74.87%
Prediction Accuracy: 74.87%

Суммировать

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

Кроме того, вы узнали:

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

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


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,React,внешний интерфейс,задняя часть,продукт,дизайнЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.