Теперь, когда вышла первая версия 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 долларов для пробной версии, поэтому я думаю, что это отличный вариант бесплатно попрактиковаться в машинном обучении на произвольно мощной машине (по крайней мере, в начале). Надеюсь, это помогло.