Если у вас не получается установить Keras и TensorFlow, или у вас нет GPU от NVIDIA, то для вас есть отличная новость от Google. Для распространения технологий машинного обучения и глубоких нейронных сетей Google сделал доступной свою облачную платформу Colaboratory. Эта среда, похожая на Jupyter Notebook, в которой уже установлены библиотеки TensorFlow и Keras, а также доступны GPU NVIDIA K80. Есть все, что нужно для обучения глубоких нейросетей. Использование этой платформы полностью бесплатно. Давайте рассмотрим, как можно выполнять заданий курса “Программирование глубоких нейронных сетей на Python” на Colaboratory.

Платформа Google Colaboratory

В Google Colaboratory можно создавать ноутбуки, примерно как в Jupyter. Ноутбук выполняется на виртуальной машине в облаке, которая выделяется специально для вас. По умолчанию создается виртуальная машина с центральным процессором, но можно подключить и GPU. Если вы некоторое время не работаете в ноутбуке, то виртуальная машина отключается. Максимальное время жизни виртуальной машины 12 часов. За такое время на GPU можно обучить любую нейронную сеть из учебного курса, и даже простые продуктивные модели.

Для использования Colaboratory нужна учетная запись Google и браузер Chrome, в который устанавливается специальное приложение. Это приложение позволяет запускать ноутбуки с кодом на Python в браузере.

Ноутбуки в Google Colaboratory – это файлы на диске Google Drive. Ими можно делиться, сохранять себе в Google Drive, и даже допускается совместная работа нескольких человек над одним ноутбуком.

Распознаем объекты на изображениях из набора данных CIFAR-10 в Google Colaboratory

Давайте рассмотрим, как можно использовать Google Colaboratory для запуска учебных задач из курса. В качестве примера возьмем распознавание объектов на изображениях из набора данных CIFAR-10, т.к. там используется достаточно большая сверточная нейронная сеть, которую долго обучать без GPU.

Я уже создал ноутбук в Colaboratory, в котором выполняется обучение сверточной нейронной сети для распознавания объектов из CIFAR-10. Просто откройте ссылку в браузере Chrome и выберите “Open with Colaboratory”.

Открыть ноутбук в Colaboratory

Если вы открываете ноутбук первый раз, то Chrome предложит вам установить Colaboratory. После установки вы сможете открыть ноутбук.

Выглядит ноутбук в Colaboratory почти также, как в Jupyter. Он состоит из отдельных блоков, которые могут быть кодом или текстом. Блок кода можно запустить, нажав на кнопку “Play” слева от него, либо нажав на клавиатуре Ctrl+Enter.

Открыть ноутбук в Colaboratory

У вас не получится запустить или изменить код в моем ноутбуке, поэтому нужно создать свою копию. Для этого выберите пункт меню File -> Save a copy in Drive… и сохраните ноутбук себе в Google Drive. В копии вы сможете запускать и изменять код.

В Colaboratory уже установлены Keras и TensorFlow, поэтому мы можем сразу же импортировать их модули. Задание и обучение нейронной сети в Colaboratory делается стандартными средствами Keras. Рассмотрим некоторые особенности, связанные именно с Colaboratory.

Загрузка данных

Виртуальная машина в Colaboratory создается для вас каждый раз, когда вы запускаете ноутбук, а после остановки ноутбука виртуальная машина уничтожается вместе со всеми данными. Поэтому первый шаг при запуске ноутбука на Colaboratory – это загрузка данных. Для небольших наборов данных, поддержка которых встроена в Keras, это можно легко сделать встроенными средствами Keras:

(X_train, y_train), (X_test, y_test) = cifar10.load_data()

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

Загрузка данных в Colaboratory

Загрузить данные с соревнований Kaggle можно с помощью Kaggle CLI. Для начала его нужно установить:

!pip install kaggle-cli

Восклицательный знак в начале команды говорит, что это не код Python, а команда операционной системы. Она будет выполнена в виртуальной машине и установиться пакет Python kaggle-cli.

Для загрузки набора данных с соревнований “Dogs vs Cats” нужно выполнить команду:

!kg download -u имя_пользователя -p пароль -c dogs-vs-cats -f train.zip

Интересующее нас соревнование указывается в ключе -c, а конкретный файл – в -f. Не забудьте вставить свое имя пользователя и пароль на сайте kaggle. Перед загрузкой нужно зайти на сайт и принять условия участия в соревновании.

Можно также загрузить любые данные из интернет с помощью команды wget. Например, для загрузки набора данных о химическом составе вин с целью определения места их происхождения из UCI Machine Learning Repository, можно воспользоваться следующей командой:

!wget https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data

Все загруженные данные сохраняются в локальную файловую систему виртуальной машины. Для работы с ними можно использовать стандартные команды Linux: ls, cp, mv, rm. Не забудьте добавлять восклицательный знак перед командой в ноутбуке.

Подключение GPU

Виртуальная машина в Colaboratory создается с центральным процессором, но к ней можно подключить GPU. Для этого выберите в меню ноутбука пункт Runtime -> Change Runtime Type. Появится окно, в котором есть поле “Hardware Accelerator”. В этом поле нужно заменить значение “None” на “GPU” и нажать кнопку Save.

Подключение GPU в Colaboratory

После смены Runtime для вас создастся новая виртуальная машина с GPU. На ней придется заново выполнять все команды ноутбука, так что рекомендую менять Runtime сразу после открытия ноутбука.

Модель GPU в виртуальной машине можно узнать с помощью файловой системы /proc.

Модель GPU в Colaboratory

Используется GPU Tesla K80. Достаточно мощный ускоритель, хотя и не последняя модель.

Обучение глубоких нейронных сетей на GPU выполняется гораздо быстрее, чем на CPU. Для обучения одной эпох сверточной нейронной сети для распознавания объектов CIFAR-10 нужно примерно 23 секунды.

Обучение на GPU в Colaboratory

Обучение той же самой сети на CPU требует в 10 с лишним раз больше времени: примерно 260 секунд на одну эпоху.

Обучение на СPU в Colaboratory

Если у вас глубокая нейронная сеть, то для ее обучения рекомендуется использовать GPU. Тем более что Google дает GPU бесплатно.

Сохранение обученной нейронной сети

Мы обучили сеть в Colaboratory с GPU, но теперь нам нужно ее сохранить и скачать с облачной платформы на свой компьютер. Для сохранения обученной нейронной сети воспользуемся стандартными средствами Keras:

model_json = model.to_json()
json_file = open("cifar10_model.json", "w")
json_file.write(model_json)
json_file.close()
model.save_weights("cifar10_model.h5")

Мы сохранили архитектуру нейронной сети и обученные веса в файлы cifar10_model.json и cifar10_model.h5. Но эти файлы находятся на виртуальной машине. Проверить это можно командой ls

Просматриваем файлы на виртуальной машине Colaboratory

Для загрузки файлов с виртуальной машины на свой компьютер можно воспользоваться встроенными в Colaboratory средствами работы с файлами. Подключаем соответствующий модуль:

from google.colab import files

Загружаем файлы командами:

files.download("cifar10_model.json") 
files.download("cifar10_model.h5") 

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

Тестируем работу нейронной сети на дополнительных изображениях

Мы обучили нейронную сеть и проверили качество ее работы на данных из набора CIFAR-10. Теперь хочется оценить, как будет работать нейронная сеть с картинками, которые не входят в CIFAR-10. Для этого нам нужно загрузить свои изображений с локального компьютера на виртуальную машину Colaboratory. Воспользуемся модулем files, у которого есть метод upload. При вызове этого метода откроется окно выбора файлов браузера. Файлы, которые вы выберете в этом окне, будут отправлены на виртуальную машину. Вот пример загрузки картинки с самолетом:

Загружаем файлы на виртуальную машину Colaboratory

В выводе команды ls видно, что на виртуальную машину записан новый файл plane.jpg.

Теперь можно использовать стандартные средства Matplotlib и Keras чтобы просмотреть этот файл и распознать, какой объект на нем находится.

Распознаем картинку в Colaboratory

Как мы видим, нейронная сеть успешно распознала самолет на картинке.

Итоги

Google Colaboratory – это очень удобная облачная платформа для обучения глубоких нейронных сетей. Вы получаете ноутбук, похожий на Jupyter, в котором установлены Keras, TensorFlow и другие полезные библиотеки машинного обучения, а также доступен GPU Tesla K80. В этой среде можно очень быстро начать обучать нейронные сети. Не нужно ничего дополнительно устанавливать, все уже готово к работе. И самое главное, это абсолютно бесплатно!

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

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

Пишите в комментариях о своем опыте использования Google Colaboratory!

Полезные ссылки

  1. Платформа Google Colaboratory.
  2. Распознавание объектов на изображениях из набора данных CIFAR-10 в Google Colaboratory.
  3. Распознавание рукописных цифр из набора данных MNIST в Google Colaboratory.
  4. Оценка стоимости недвижимости с помощью нейронной сети в Google Colaboratory.
  5. Оценка тональности отзывов на фильмы.
  6. Сохранение обученной нейронной сети в Keras.
  7. Учебный курс “Программирование глубоких нейронных сетей на Python”.