Теперь, когда вышла первая версия fastai, я решил запачкать руки. В Google Colab вы можете бесплатно использовать графический процессор для проекта ноутбука. Поэтому я выбрал Colab, чтобы опробовать все новые fastai версии 1 (точнее, 1.0.5).

Вы можете создать ipynb на вашем Gdrive с помощью `new› more ›Colaboratory`.

Открыв новый файл ipynb, вы можете изменить среду выполнения для использования графического процессора, выбрав «Время выполнения› Изменить тип среды выполнения ». Выберите Python3 и GPU.

Кстати, я думаю, что Colab может попробовать машинное обучение с небольшими данными, но этого недостаточно для серьезного машинного обучения. (Вероятно, потому что это бесплатно) много раз вы будете сталкиваться с ошибкой «GPU недоступен». Тогда вам придется попробовать позже или использовать среду ЦП.

Я нашел удобный код на [странице Github] (https://github.com/chungbrain/Google-Colab-with-GPU), который я адаптировал. Он устанавливает предварительную (ночную) сборку PyTorch, от которой зависит fastai v1. Он проверяет, установлен ли на оборудовании графический процессор Nvidia, и устанавливает только сборку процессора, если графический процессор недоступен. Если все пойдет так, как ожидалось, вы должны увидеть напечатанную версию ночной сборки (что-то похожее на `1.0.0.dev20181005`) и True из torch.cuda.is_available() и torch.backends.cudnn.enabled.

А потом устанавливаешь фастай. Библиотека находится в активной разработке, поэтому я указал версию «1.0.5» на случай, если в будущем в API произойдут критические изменения.

Теперь я перейду к примеру MNIST, который я адаптировал из официального fastai Github (https://github.com/fastai/fastai/blob/master/examples/vision.ipynb).

Это все, что вам нужно для импорта, чтобы следовать этому короткому руководству. Автор библиотеки Джереми продвигает импорт с * для более быстрых итераций и лучшей интерактивности. Я думаю, что использование * также хорошо для быстрого прототипирования и экспериментов. Но импорт по отдельности должен прояснить, откуда все берется, поэтому он должен помочь читателям этого поста и мне лучше узнать об этой библиотеке. Кроме того, сейчас, когда я пишу об этом, я больше не экспериментирую с этой записной книжкой, поэтому у меня нет причин использовать * импорт. Если я продолжу использовать этот стиль импорта в будущих публикациях, теперь вы знаете, почему я это делаю (также я пришел из опыта разработки программного обеспечения, где очень ценятся конкретные import). Но не стесняйтесь использовать * импорт.

MNIST_PATH - это путь к данным MNIST, предоставленным fastai.docs. И мы распаковываем данные.

Мы можем MNIST_PATH содержать поезд, действительные (действующие) каталоги и файл метки csv. И в каждом из каталогов есть подкаталог 3 и 7. Полноценный MNIST будет иметь все 10 цифр, но я думаю, этого достаточно, чтобы просто продемонстрировать пример классификации изображений.

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

Теперь мы загружаем данные, передавая путь к данным и функции преобразования набора данных, и получаем объект данных. Здесь мы применяем только некоторые случайные отступы для увеличения данных. Если мы проиндексируем 0-й элемент в наборе данных поезда, мы получим изображение и метку. И на изображении есть цифра 3.

Теперь мы передаем данные, архитектуру (в данном случае resnet18) и метрики в ConvLearner (Conv, как в Convolutional, мы будем использовать сверточную нейронную сеть, потому что это проблема компьютерного зрения), и мы возвращаем объект обучения. Затем мы тренируем 1 эпоху, вызывая fit на объекте. Точность измерения показывает, что отличить 3 от 7. с точностью 98,6%. Что ж, по многим веским причинам вы, вероятно, захотите использовать [log loss] (http://wiki.fast.ai/index.php/Log_Loss ) В качестве метрики, но оставим это в этой публикации.

Наконец, что мы на самом деле получаем, вызывая get_preds метод? Оказывается, он возвращает а) прогнозы как вероятности того, что пример относится к определенному классу и б) фактические метки, по которым мы можем использовать прогнозы для измерения потерь.

Ну вот и все для этого поста. Пожалуйста, дайте мне обратную связь, чтобы я мог улучшить свой пост. Я не думаю, что буду так часто использовать Colab для машинного обучения, но похоже, что это неплохая сделка за деньги (которые равны нулю) и отличный способ совместной работы в Интернете с использованием среды ноутбука. Тот факт, что он почти не требует настройки (установка Anacoda или чего-то подобного для ноутбука), тоже очень хорошо. Я продолжу писать о машинном обучении, но в следующий раз перейду к вычислительному движку Google Cloud Platform. Он дает бесплатные кредиты на 300 долларов для пробной версии, поэтому я думаю, что это отличный вариант бесплатно попрактиковаться в машинном обучении на произвольно мощной машине (по крайней мере, в начале). Надеюсь, это помогло.