Учебник по Keras: пример глубокого обучения с помощью Keras и Python

Keras — это библиотека с открытым исходным кодом для создания приложений глубокого обучения. Keras написана на языке Python и предлагает единый интерфейс для различных бэкендов глубокого обучения, таких как «TensorFlow» и «Theano». Глубокое обучение — это поджанр машинного обучения, основанный на искусственных нейронных сетях.

Цель Keras — сделать глубокое обучение менее сложным. В ходе этого руководства по Keras мы изучим функциональность Keras на простом примере.

Подготовка системы к использованию Keras

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

Установка Anaconda и Python

Следующие объяснения и приведенный ниже код предназначены для пользователей macOS. В принципе, код должен работать и на других операционных системах. Однако, возможно, вам придется внести некоторые коррективы, особенно если вы используете Windows.

Если вы знакомы с командной строкой и на вашем Mac установлена система управления пакетами свободного программного обеспечения Homebrew, вы можете использовать ее для установки Anaconda. Для этого откройте командную строку («Terminal.App» на Mac), скопируйте в терминал следующую строку кода и выполните ее.

brew cask install anaconda

Если вы не знакомы с Homebrew или хотите установить Anaconda на систему Windows или Linux, вы можете загрузить соответствующий установочный пакет для вашей системы со следующей страницы: Anaconda — Individual Edition.

Тестирование установки Anaconda и Python

Чтобы убедиться, что Anaconda и Python были установлены правильно, выполните следующие команды в командной строке:

Для отображения версии менеджера пакетов Conda

conda –version

Чтобы отобразить версию интерпретатора Python.

python --version

Если при вводе вы получаете сообщение об ошибке «Command not found», возможно, вам необходимо задать путь к двоичным файлам Anaconda. Чтобы сделать это, продолжите чтение. Если тесты сработали, вы можете пропустить следующий раздел.

Установка пути к двоичным файлам Anaconda

Переменная окружения «PATH» содержит информацию о том, где в файловой системе находятся определенные программы. Отдельные пути в переменной окружения разделяются двоеточием. Вы можете добавить несколько путей, как показано здесь для Anaconda версии 3:

export PATH=/usr/local/anaconda3/bin:"$PATH"

Чтобы убедиться, что путь действительно активен, вы должны сохранить эту строку кода в вашей системе. В зависимости от вашей системы и используемой оболочки (bash, zsh и т.д.), файл, в котором производится изменение, будет отличаться. Ниже мы проиллюстрируем это на примере bash в macOS.

Выполните следующие строки кода в командной строке для изменения переменной пути в файле «.bash_profile»:

Переменная пути для расширения установки Anaconda

echo -n 'export PATH=/usr/local/anaconda3/bin:"$PATH"' >> "$HOME/.bash_profile"

Загрузить файл .bash_profile

source "$HOME/.bash_profile"
Совет

Используйте команду ‘cat «$HOME/.bash_profile»‘ в командной строке, чтобы показать существующий файл «.bash_profile».

Теперь повторите тесты:

Показать версию менеджера пакетов Conda

conda –version

Показать версию интерпретатора Python.

python --version

Теперь вы должны увидеть номера версий. Если это так, вы можете продолжить следующие шаги.

Обновление установок Anaconda и Python до последней версии

Перед началом работы над новым проектом лучше всего обновить базовые библиотеки. Платформа Anaconda поставляется с менеджером пакетов «conda». Используйте следующие команды conda, чтобы воспользоваться доступными обновлениями:

Установить обновления для менеджера пакетов Conda

conda update conda

Установить обновления Anaconda

conda update anaconda

Проверка номеров версий установленных пакетов глубокого обучения Keras

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

python << EOF
print()
# scipy
import scipy
print('scipy: %s' % scipy.__version__)
# numpy
import numpy
print('numpy: %s' % numpy.__version__)
# matplotlib
import matplotlib
print('matplotlib: %s' % matplotlib.__version__)
# pandas
import pandas
print('pandas: %s' % pandas.__version__)
# statsmodels
import statsmodels
print('statsmodels: %s' % statsmodels.__version__)
# scikit-learn
import sklearn
print('sklearn: %s' % sklearn.__version__)
print()
EOF

Установка Keras на вашу систему

Теперь, когда мы подготовили систему, мы можем приступить к установке Keras. Для этого выполните следующие строки кода в командной строке:

Установка TensorFlow

pip install tensorflow

Установите Keras

pip install keras

Как и раньше, лучше всего проверить версию установленного Keras. Для этого используйте следующую строку кода:

python -c "import keras; print(keras.__version__)"

Если Keras был установлен некоторое время назад, стоит поискать все доступные обновления и установить их. Следующая строка кода сделает это за вас. Скопируйте ее как обычно и выполните код в командной строке:

pip install --upgrade keras

Глубокое обучение с помощью Keras: пример

Команда разработчиков Keras публикует список с примерами Keras под свободной лицензией на GitHub. Мы рассмотрим конкретный пример «mnist_cnn.py». Здесь код создает «сверточную нейронную сеть» (CNN или ConvNet) и обучает ее, используя набор обучающих данных.

Для обучения и тестирования скрипт примера Keras использует набор данных MNIST. Это большая коллекция маленьких изображений, каждое из которых имеет размер 28 x 28 пикселей. Каждое изображение также содержит число, написанное от руки. Набор данных MNIST является стандартом для распознавания образов и поставляется вместе с Keras.

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

 

python << EOF
# load Keras 
import keras
# load MNIST training and test data sets
from keras.datasets import mnist
# Load library for graphic representation
import matplotlib.pyplot as plt
# Load function for random image selection
from random import randint
# Load datasets
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# Show image
plt.figure()
plt.imshow(train_images[randint(1, len(train_images) - 1)])
plt.grid(False)
plt.show()
EOF

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

Сначала мы создадим папку test на рабочем столе, перейдем в эту папку и создадим в ней пустой Python-скрипт. Используйте следующие строки кода; скопируйте их и запустите в командной строке:

Создать папку «keras-test» на рабочем столе

mkdir "$HOME/Desktop/keras-test/" && cd "$HOME/Desktop/keras-test/"

Создать пустой скрипт Python

touch keras-test.py

Далее необходимо скопировать скрипт в файл «keras-test.py» и сохранить его.

После создания папки test следующим шагом будет создание скрипта примера Keras. Для этого скопируйте код в конце этой статьи и вставьте его в пустой текстовый документ. Сохраните документ в папке «keras-test», которую вы только что создали на рабочем столе, внутри файла «keras-test.py». Наконец, чтобы выполнить сценарий примера Keras с помощью интерпретатора Python, введите в командную строку следующие строки кода:

cd "$HOME/Desktop/keras-test/" && python keras-test.py

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

Примечание

Для сохранения кода используйте только редактор кода/»обычный текстовый» редактор. Ни в коем случае не используйте для этого программы обработки текстов, такие как Word, OpenOffice или LibreOffice.

# Save code in the file “keras-test.py” in the folder “keras-test”
from __future__ import print_function
# load Keras 
import keras
# MNIST load training and test data sets 
from keras.datasets import mnist
# Loading a sequential model
from keras.models import Sequential
# Load layers of the neural network
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
# Number of different data characteristics: digits 0–9
num_classes = 10
# Number of passes for training the neural network
epochs = 12
# Number of files used during one pass
batch_size = 128
# Dimensions of the input screens (28 x 28 pixels per image)
img_rows, img_cols = 28, 28
# Load training and testing data
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
if K.image_data_format() == 'channels_first':
    train_images = train_images.reshape(train_images.shape[0], 1, img_rows, img_cols)
    test_images = test_images.reshape(test_images.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    train_images = train_images.reshape(train_images.shape[0], img_rows, img_cols, 1)
    test_images = test_images.reshape(test_images.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)
# Set floating point data type
train_images = train_images.astype('float32')
test_images = test_images.astype('float32')
# Normalize image data
train_images /= 255
test_images /= 255
print('train_images shape:', train_images.shape)
print(train_images.shape[0], 'train samples')
print(test_images.shape[0], 'test samples')
# Convert class vectors into binary class matrices
train_labels = keras.utils.to_categorical(train_labels, num_classes)
test_labels = keras.utils.to_categorical(test_labels, num_classes)
# Create model
model = Sequential()
# Add layers to model
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
# Compile layers
model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])
# Train model
model.fit(train_images, train_labels,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(test_images, test_labels))
# Evaluate model
score = model.evaluate(test_images, test_labels, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

Оцените статью
cdelat.ru
Добавить комментарий