- Как начать работу с Keras?
- Установка Keras
- Загрузка данных с диска
- Определение архитектуры модели Keras
- Подготовка модели к работе
- Пример MNIST
- Подготовка данных
Если вы пристально следите за технологической сценой, вы наверняка слышали термин «глубокое обучение».
Эта технология произвела революцию в искусственном интеллекте, помогая человечеству создавать машины и системы, о которых раньше мы только мечтали. По сути, Deep Learning - это подсистема машинного обучения, в которой используются глубокие искусственные нейронные сети.
Простой в использовании и широко поддерживаемый, Keras делает работу с глубоким изучением очень удобной и эффективной.
Как начать работу с Keras?
Глубокие нейронные сети все больше входят в моду, но сложность освоения их основных структур является серьезным препятствием для использования многими разработчиками, которые плохо знакомы с машинным обучением.
На протяжении 2010-2020 годов было предложено несколько улучшенных и упрощенных высокоуровневых API для построения моделей нейронных сетей. Все они в целом похожи, но демонстрируют значительные различия при ближайшем рассмотрении.
Keras - один из ведущих API-интерфейсов нейронных сетей высокого уровня. Он написан на Python и поддерживает несколько внутренних вычислительных движков нейронных сетей. Основная идея разработки Keras - облегчить эксперименты путем быстрого прототипирования. Способность перейти от идеи к результату с наименьшей возможной задержкой является ключом к хорошим исследованиям машинного интеллекта.
По сути - это просто высокоуровневая библиотека, построенная на основе Theano или TensorFlow. Keras предоставляет API типа scikit-learn для построения нейронных сетей. Разработчики могут использовать Keras для быстрого построения нейронных сетей, не беспокоясь о математических аспектах тензорной алгебры, численных методах и методах оптимизации.
Начать работу с Keras без проблем может любой разработчик, который уже имел дело со средой Python.
Установка Keras
Для начала работы вам потребуется следующее предустановленное программное обеспечение:
- язык Python 2.7+ (Python 3 также вполне подойдет);
- последнюю версию научной библиотеки SciPy с NumPy;
- последнюю версию библиотеки матриц Matplotlib – можно использовать по желанию, нужна для визуализации ресерч-анализа данных;
- последнюю версию библиотеки численных вычислений Theano.
Далее установите пакет keras R из GitHub следующим образом:
devtools::install_github("rstudio/keras")
Интерфейс Keras R по умолчанию использует серверный движок TensorFlow. Чтобы установить как базовую библиотеку Keras, так и бэкэнд TensorFlow, используйте функцию install_keras ():
library(keras)install_keras()
Это обеспечит вам стандартные установки Keras и TensorFlow на основе процессора. Если вы хотите более индивидуальную установку, например, желаете воспользоваться преимуществами графических процессоров NVIDIA, обратитесь к документации по install_keras ().
Загрузка данных с диска
Специального способа загрузки данных в Keras с локального диска не существует, просто сохраните данные теста и работайте с ними в соответствующей папке.
-- current directory
-- data
| --train
| -- test
Если ваш поток каталогов такой, то для загрузки данных вы можете использовать следующий код:
import os
import numpy as np
from keras.preprocessing
import image
PATH = os.getcwd()
train_path = PATH+'/data/train/'
train_batch = os.listdir(train_path)
x_train = []
# if data are in form of images
for sample in train_data:
img_path = train_path+sample
x = image.load_img(img_path)...
Определение архитектуры модели Keras
Базовая структура данных Keras - это модель, способ организации слоев. В Keras доступно два основных типа моделей: последовательная модель и класс Model, используемый с функциональным API. Простейшим типом модели является последовательная модель, линейный стек слоев.
Последовательная модель представляет собой линейный стек слоев, и слои можно описать очень просто.
Вот пример из документации Keras, которая использует model.add () для определения двух плотных слоев в последовательной модели:
import keras
from keras.models import Sequential
from keras.layers import Dense
#Create Sequential model with Dense layers, using the add method
model = Sequential()
#Dense implements the operation:
# output = activation(dot(input, kernel) + bias)
#Units are the dimensionality of the output space for the layer,
# which equals the number of hidden units
#Activation and loss functions may be specified by strings or classes
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
#The compile method configures the model’s learning process
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
#The fit method does the training in batches
# x_train and y_train are Numpy arrays --just like in the Scikit-Learn API.
model.fit(x_train, y_train, epochs=5, batch_size=32)
#The evaluate method calculates the losses and metrics
# for the trained model
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
#The predict method applies the trained model to inputs
# to generate outputs
classes = model.predict(x_test, batch_size=128)
Стоит также отметить, как мало фактического кода в реальном коде по сравнению, скажем, с низкоуровневыми API TensorFlow. Для каждого определения уровня требуется одна строка кода, для компиляции (определение процесса обучения) требуется одна строка кода, а для подбора (обучения), оценки (расчета потерь и метрик) и прогнозирования выходных данных обученной модели требуется по одной строке кода.
Подготовка модели к работе
Мы начинаем с создания последовательной модели, а затем добавляем слои с помощью оператора pipe (%>%):
model <- keras_model_sequential()
model %>%
layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>%
layer_dropout(rate = 0.4) %>%
layer_dense(units = 128, activation = 'relu') %>%
layer_dropout(rate = 0.3) %>%
layer_dense(units = 10, activation = 'softmax')
Аргумент input_shape для первого слоя определяет форму входных данных (числовой вектор длиной 784, представляющий изображение в градациях серого). Последний слой выводит числовой вектор длиной 10 (вероятности для каждой цифры), используя функцию активации softmax.
Используйте функцию summary (), чтобы напечатать детали модели:
summary(model)
Model
___________________________________________________________________________
Layer (type) Output Shape Param #
===================================================================
dense_1 (Dense) (None, 256) 200960
___________________________________________________________________________
dropout_1 (Dropout) (None, 256) 0
___________________________________________________________________________
dense_2 (Dense) (None, 128) 32896
___________________________________________________________________________
dropout_2 (Dropout) (None, 128) 0
___________________________________________________________________________
dense_3 (Dense) (None, 10) 1290
===================================================================
Total params: 235,146
Trainable params: 235,146
Non-trainable params: 0
___________________________________________________________________________
Затем скомпилируйте модель с соответствующей функцией потерь, оптимизатором и метриками:
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_rmsprop(),
metrics = c('accuracy')
Распознавание изображений с использованием обученной модели
Пример MNIST
Мы можем изучить основы Keras, пройдя простой пример: распознавание рукописных цифр из набора данных MNIST.
MNIST состоит из 28 x 28 px изображений в градациях серого, например:
5 0 4 1
Набор данных также включает в себя метки для каждого изображения, указывающие нам, какая это цифра. Например, метки для изображений выше 5, 0, 4 и 1.
Подготовка данных
Набор данных MNIST включен в Keras и доступен с помощью функции dataset_mnist ().
Здесь мы загружаем набор данных, затем создаем переменные для наших тестовых и обучающих данных:
library (keras)
mnist <- dataset_mnist ()
x_train <- mnist $ train $ x
y_train <- mnist $ train $ y
x_test <- mnist $ test $ x
y_test <- mnist $ test $ y
Данные x - это трехмерный массив (изображения, ширина, высота) значений оттенков серого. Чтобы подготовить данные для обучения, мы конвертируем трехмерные массивы в матрицы, изменяя ширину и высоту в одном измерении (28x28 изображений сведены в длину 784 вектора).
Затем мы конвертируем значения в градациях серого из целых чисел в диапазоне от 0 до 255 в значения с плавающей запятой в диапазоне от 0 до 1:
# reshape
x_train <- array_reshape (x_train, c (nrow (x_train), 784))
x_test <- array_reshape (x_test, c (nrow (x_test), 784))
# rescale
x_train <- x_train / 255
x_test <- x_test / 255
Обратите внимание, что мы используем функцию array_reshape (), а не функцию dim <- () для изменения формы массива. Это делается для того, чтобы данные интерпретировались с использованием семантики основных строк (в отличие от семантики основных столбцов по умолчанию в R), что, в свою очередь, совместимо с тем, как числовые библиотеки, вызываемые Keras, интерпретируют измерения массива.
Данные y представляют собой целочисленный вектор со значениями в диапазоне от 0 до 9.
Чтобы подготовить эти данные к обучению, мы однозначно кодируем векторы в двоичные матрицы классов, используя функцию Keras to_categorical ():
y_train <- to_categorical (y_train, 10)
y_test <- to_categorical (y_test, 10)
Этот пример показывает, как реализовать сверточную нейронную сеть по распознаванию образов с Keras. Такие модели позволяют достичь более высокой точности, чем стандартные полностью подключенные сети, а работа с ними занимает совсем немного времени.
Заказывайте хостинг в компании “Хостинг Украина”. У нас Вы сможете подобрать тот пакет услуг, который максимально будет соответствовать потребностям вашего бизнеса.
Качественный и не дорогой SSD хостинг от 1$, VPS на SSD от 12$, Cloud (облачный) хостинг от 3$, облачный VPS от 6$. Выделенный сервер или dedicated server.
Просто выберите домен, хостинг и установите подходящую CMS в один клик.
Мы предлагаем лучший виртуальный хостинг для сайтов на Joomla, Wordpress и других популярных CMS с поддержкой PHP, Perl, MySQL.
У нас круглосуточная техническая поддержка, которая поможет решить любые возникшие вопросы относительно хостинга или домена.