Зміст
    17.03.2020
    1. Как начать работу с Keras?
    2. Установка Keras
    3. Загрузка данных с диска
    4. Определение архитектуры модели Keras
    5. Подготовка модели к работе
    6. Пример MNIST
    7. Подготовка данных

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

    Эта технология произвела революцию в искусственном интеллекте, помогая человечеству создавать машины и системы, о которых раньше мы только мечтали. По сути, 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.

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