Машинное обучение ? это просто. Но знаете ли вы, что можно использовать Python для машинного обучения? Вот инструкция по настройке для Windows.
Люди привыкли выполнять большую часть работы автономно. В этой статье рассказываем о возможностях Python для машинного обучения на Windows, описание дистрибутива Anaconda, процесс его установки и создание нейронной сети.
Используемый в Python pip не идеален. Для оптимизации работы был выпущен дистрибутив Anaconda и система управления Conda, которые могут помочь в настройке Python для машинного обучения.
Хотя Conda тесно связана с Anaconda, эти проекты отличаются своими функциями. Anaconda ? дистрибутив ПО в экосистеме PyData, которая включает сам Python, а также двоичные файлы для нескольких сторонних проектов. Существует и Miniconda ? версия с минимальным исходным пакетом. Conda ? система управления пакетами, которая может быть установлена без Anaconda или Miniconda. Она способна решать проблемы внешних зависимостей, путем загрузки скомпилированных версий ПО. Кроме того, Conda является менеджером среды. С ее помощью вы можете настроить отдельную среду. Сейчас мы рассмотрим процесс установки Miniconda.
Скачайте и установите необходимую версию Miniconda на ПК. При установке продвинутых настроек снимите галочку с первого пункта.
Поскольку при установке не был выбран пункт «Add Anaconda to my PATH environment variable», то команды Anaconda не будут работать в командной строке по умолчанию. Для их использования следует запустить дистрибутив отдельно. Когда он откроется, проверьте доступность Conda, запустив conda —version:
1
2
(base)C:UsersIEUser>conda--version
conda4.5.11
Чтобы получить больше информации об установке, запустите conda info:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(base)C:UsersIEUser>conda info
active environment:base
active env location:C:UsersIEUserMiniconda3
shell level:1
user config file:C:UsersIEUser.condarc
populated config files:C:UsersIEUser.condarc
conda version:4.5.11
conda-build version:notinstalled
python version:3.7.0.final.0
base environment:C:UsersIEUserMiniconda3(writable)
При работе с чужими проектами у вас может возникнуть потребность в установке определенных версий пакетов. Виртуальные среды ? решение проблемы. Они позволяют создать несколько сред, каждая из которых имеет разные версии пакетов. Базовая настройка Python для машинного обучения включает в себя Virtualenv, инструмент для создания изолированных сред.
Conda включает собственный менеджер среды и дает некоторые преимущества относительно Virtualenv. Кроме того, среды Conda полностью совместимы с базовыми пакетами Python, которые могут быть установлены с помощью pip.
Используя Anaconda, можно проверить доступные среды Conda, запустив сonda env list:
1
2
(base)C:UsersIEUser>conda env list
base *C:UsersIEUserMiniconda3
Базовая среда ? корневая среда, созданная Miniconda. Можно создать еще одну, под названием otherenv, путем запуска conda create —name otherenv:
После завершения процесса создания среды, можно ее активировать, запустив conda activate otherenv. Заметить изменения среды можно, посмотрев на скобки в начале строки:
1
2
3
(base)C:UsersIEUser>conda activate otherenv
(otherenv)C:UsersIEUser>
Откройте Python interpreter в этой среде, запустив python:
Среда включает в себя Python 3.7.0, ту же версию, что включена в корневую среду. Чтобы выйти, запустите quit():
1
2
3
>>>quit()
(otherenv)C:UsersIEUser>
Чтобы отключить среду otherenv и вернуться в корневую среду, пропишите deactivate:
1
2
3
(otherenv)C:UsersIEUser>deactivate
(base)C:UsersIEUser>
Conda позволяет легко создавать среды с различными версиями Python. Чтобы включить другую версию в среду, укажите ее, используя python =<version> при запуске conda create. Чтобы создать среду с именем py2 с Python 2.7, запустите conda create —name py2 python=2.7:
Как видно из вывода conda create, были установлены новые пакеты, так как среда использует Python 2.7. Можно проверить, что среда действительно использует его, активировав Python interpreter:
Пакеты ПО могут быть установлены с помощью Conda. Корневая база Miniconda включает в себя базовые пакеты, которые не являются частью стандартной библиотеки Python для настройки машинного обучения.
Установка по умолчанию включает минимум пакетов Conda. Чтобы проверить список установленных пакетов, нужно убедиться, что она активна, и запустить conda list. В корневой среде устанавливаются эти пакеты:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(base)C:UsersIEUser>conda list
asn1crypto0.24.0py37_0
ca-certificates2018.03.070
certifi2018.8.24py37_1
cffi1.11.5py37h74b6da3_1
chardet3.0.4py37_1
conda4.5.11py37_0
conda-env2.6.01
console_shortcut0.1.13
cryptography2.3.1py37h74b6da3_0
idna2.7py37_0
menuinst1.4.14py37hfa6e2cd_0
openssl1.0.2phfa6e2cd_0
pip10.0.1py37_0
pycosat0.6.3py37hfa6e2cd_0
pycparser2.18py37_1
pyopenssl18.0.0py37_0
pysocks1.6.8py37_0
python3.7.0hea74fb7_0
pywin32223py37hfa6e2cd_1
requests2.19.1py37_0
ruamel_yaml0.15.46py37hfa6e2cd_0
setuptools40.2.0py37_0
six1.11.0py37_1
urllib31.23py37_0
vc14h0510ff6_3
vs2015_runtime14.0.251233
wheel0.31.1py37_0
win_inet_pton1.0.1py37_1
wincertstore0.2py37_0
yaml0.1.7hc54c509_2
(base)C:UsersIEUser>
Поиск и установка пакетов
Пакеты устанавливаются из репозиториев, называемых channels by Conda. Чтобы выполнить поиск определенного пакета, запустите поиск <package name>. Вот так вы будете искать keras:
1
2
3
4
5
6
7
8
9
10
11
(base)C:UsersIEUser>conda search keras
Loading channels:done
keras2.0.8py35h15001cb_0 pkgs/main
keras2.0.8py36h65e7a35_0 pkgs/main
keras2.1.2py35_0 pkgs/main
keras2.1.2py36_0 pkgs/main
keras2.1.3py35_0 pkgs/main
keras2.1.3py36_0 pkgs/main
...(more)
Для каждой версии существуют разные версии пакетов и сборки. Предыдущий поиск показывает только пакеты с именем keras. Чтобы выполнить более широкий поиск, используйте *. Например, при запуске conda search *keras*, вы получите следующее:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(base)C:UsersIEUser>conda search *keras*
Loading channels:done
keras2.0.8py35h15001cb_0 pkgs/main
keras2.0.8py36h65e7a35_0 pkgs/main
keras2.1.2py35_0 pkgs/main
keras2.1.2py36_0 pkgs/main
keras2.1.3py35_0 pkgs/main
keras2.1.3py36_0 pkgs/main
...(more)
keras-applications1.0.2py35_0 pkgs/main
keras-applications1.0.2py36_0 pkgs/main
keras-applications1.0.4py35_0 pkgs/main
...(more)
keras-base2.2.0py35_0 pkgs/main
keras-base2.2.0py36_0 pkgs/main
...(more)
Вы можете заметить, что в каналах по умолчанию есть и другие пакеты, связанные с keras.
Чтобы установить пакет, запустите conda install <package name>. По умолчанию самая новая версия пакета будет установлена в активной среде. Установите пакет keras в среду otherenv, созданную вами:
Conda управляет необходимыми функциями для пакета. Так как у keras их много, при его установке Conda позволяет установить большой список пакетов.
Поскольку новая сборка keras использует Python 3.6, а среда otherenv была создана с использованием Python 3.7, пакет python 3.6.6 был включен как зависимость. После подтверждения установки вы сможете проверить, что версия Python для среды otherenv была понижена до версии 3.6.6.
Но если вы не хотите понижать версию вашего пакета, просто создайте новую среду с необходимой версией Python. Чтобы проверить список пакетов и прочего, необходимого для ее установки, посмотрите на параметр —dry-run:
При необходимости можно изменить базовую версию Python среды Conda, установив определенную версию пакета python. Создайте новую среду под названием envpython:
Иногда вам будет нужно обновлять пакеты. Для этого запустите conda update <package name>. Если вы хотите обновить все пакеты, активируйте среду и запустите conda update —all. Чтобы удалить пакеты, пропишите conda remove <package name>, но помните, что при удалении пакета, все зависимые от него тоже удалятся:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(base)C:UsersIEUser>conda remove numpy
Solving environment:done
environment location:C:UsersIEUserMiniconda3
removed specs:
-numpy
The following packages will be REMOVED:
matplotlib:2.2.3-py37hd159220_0
mkl_fft:1.0.4-py37h1e22a9b_1
mkl_random:1.0.1-py37h77b88f5_1
numpy:1.15.1-py37ha559c80_0
scipy:1.1.0-py37h4f6bf74_1
Proceed([y]/n)?
Использование каналов
Иногда вы не сможете найти нужные вам пакеты на базовых каналах. Вот так вы будете устанавливать pytorch:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(base)C:UsersIEUser>conda search pytorch
Loading channels:done
PackagesNotFoundError:The following packages are notavailable from current channels:
-pytorch
Current channels:
-https://repo.anaconda.com/pkgs/main/win-64
-https://repo.anaconda.com/pkgs/main/noarch
-https://repo.anaconda.com/pkgs/free/win-64
-https://repo.anaconda.com/pkgs/free/noarch
-https://repo.anaconda.com/pkgs/r/win-64
-https://repo.anaconda.com/pkgs/r/noarch
-https://repo.anaconda.com/pkgs/pro/win-64
-https://repo.anaconda.com/pkgs/pro/noarch
-https://repo.anaconda.com/pkgs/msys2/win-64
-https://repo.anaconda.com/pkgs/msys2/noarch
Tosearch foralternate channels that may provide the conda packageyou're
looking for,navigate to
https://anaconda.org
andusethe search bar at the top of the page.
В случае, если будете искать pytorch на сайте anaconda, вы получите следующие результаты:
В канале pytorch имеется пакет под названием pytorch с версией 0.4.1. Чтобы установить пакет с определенного канала, используйте параметр -c <chanel> вместе с conda install:
Также можно добавить канал, чтобы Conda производила там поиск пакетов. Чтобы посмотреть текущие каналы, запустите conda config —get channels:
1
2
3
4
(base)C:UsersIEUser>conda config--get channels
--add channels'defaults'
(base)C:UsersIEUser>
Когда у вас появится множество каналов,нужно будет выставить приоритет. Чтобы добавить канал с наименьшим приоритетом в список, запустите conda config —append channels <channel name>. С наивысшим ? conda config —prepend channels <channel name>. Рекомендуется выставлять новым каналам низкий приоритет, чтобы продолжить использовать каналы по умолчанию. Таким образом, вы можете установить pytorch, добавив канал pytorch и запустив conda install pytorch:
Иногда при настройке Python для машинного обучения вам могут понадобиться чистые пакеты Python, которые будут недоступны на каналах Conda. Например, Unipath.
Вы сможете найти пакет, используя другой канал. Но так как unipath ? чистый пакет Python, то можно использовать pip для его установки. Следует использовать pip, установленный conda create:
Наконец, используйте pip, чтобы установить unipath:
1
2
3
4
5
6
7
8
(newproject)C:UsersIEUser>pip install unipath
Collecting unipath
Installing collected packages:unipath
Successfully installed unipath-1.1
You are using pip version10.0.1,however version18.0isavailable.
You should consider upgrading via the'python -m pip install --upgrade pip'command.
(newproject)C:UsersIEUser>
После установки вы можете посмотреть на пакеты с помощью conda list и проверить, что Unipath был установлен:
1
2
3
4
5
6
7
8
9
10
11
12
13
(newproject)C:UsersIEUser>conda list
certifi2018.8.24py37_1
pip10.0.1py37_0
python3.7.0hea74fb7_0
setuptools40.2.0py37_0
Unipath1.1<pip>
vc14h0510ff6_3
vs2015_runtime14.0.251233
wheel0.31.1py37_0
wincertstore0.2py37_0
(newproject)C:UsersIEUser>
Также можно использовать пакеты из системы VSC с помощью pip. Чтобы активировать supervisor, version 4.0.0dev0. доступный в репозитории Git, для начала установите последний:
1
(newproject)C:UsersIEUser>conda install git
Теперь установите supervisor, используя pip, с помощью репозитория Git:
После завершения установки supervisor будет указан в списке установленных пакетов:
1
2
3
4
5
6
7
8
9
10
11
(newproject)C:UsersIEUser>conda list
certifi2018.8.24py37_1
git2.18.0h6bb4b03_0
meld31.0.2<pip>
pip10.0.1py37_0
python3.7.0hea74fb7_0
setuptools40.2.0py37_0
supervisor4.0.0.dev0<pip>
...(more)
XOR gate ? ещё один момент, который стоит знать в процессе настройки Python для машинного обучения: используя Conda обучите нейронную сеть функционировать как XOR gate
XOR gate реализуют операцию OR. Требуется два цифровых входа, равные 0 или 1. И вывода, 1 (true) и 0 (false). Таблица ниже суммирует операции XOR gate:
Операцию XOR можно интерпретировать как classification problem, потому что она принимает два входа и должна классифицировать их как 0 или 1 в зависимости от того, равны они друг другу или нет. Именно этот пример обычно используется в качестве первого случая обучения нейронной сети, поскольку он прост, но в то же время требует нелинейного классификатора, такого как нейронная сеть. Чтобы реализовать нейронную сеть, создайте среду Conda, названную nnxor:
1
(base)C:UsersIEUser>conda create nnxor
Теперь активируйте и установите пакет keras:
1
2
3
(base)C:UsersIEUser>conda activate nnxor
(nnxor)C:UsersIEUser>conda install keras
keras ? высокоуровневый API, который упрощает внедрение нейронных сетей поверх известных библиотек, таких как TensorFlow. Обучите следующую нейронную сеть действовать как XOR gate:
Сеть берет два входа (A, B) и передает их двум нейронам, показанными большими кругами. Затем она принимает входные данные этих нейронов и подает их на выходной нейрон, который должен обеспечивать классификацию в соответствии с таблицей XOR.
Процесс обучения состоит в том, чтобы настроить значения w_1 до w_6, чтобы выход соответствовал таблице. Для этого входные примеры начнут подаваться по одному, вывод станет рассчитываться с текущими значениями, и, сравнивая вывод с желаемым, значения будут корректироваться.
Для этого создайте папку с именем nnxor в директории (C:UsersIEUser) с файлом под именем nnxor.py, чтобы сохранить программу Python для реализации нейронной сети.
В файле nnxor.py выберите сеть для обучения и тестирования:
Импортируйте numpy, инициализируйте случайный seed, чтобы можно было воспроизвести те же результаты при повторном запуске программы и импортировать keras, используемый в сети.
Определите массив X, содержащий 4 возможных набора A-B входов, и массив y, содержащий выходные данные.
Следующие пять строк сформируют нейронную сеть. Модель Sequental() ? одна из моделей keras для определения нейронной сети. Определите первый слой из двух входных нейронов, определив их функцию активации в качестве sigmond function. Затем обозначьте входной слой их одного нейрона с той же функцией активации.
Следующие две строки определяют детали обучения сети. Чтобы настроить параметры, используйте Stochastic Gradient Descent с оптимальной скоростью обучения, равной 0,1. Наконец, выполните обучение с помощью fit(), используя X и Y в качестве примеров обучения, после того, как каждый пример будет загружен в сеть (batch_size=1). Число epochs представляет собой количество попыток обучения сети.
В этом случае вы повторяете операцию 5500 раз, используя обучающий набор, содержащий 4 примера ввода и вывода. После обращения нейросети к исходным данным тренировочные варианты перемешиваются заново.
На последней строке вы печатаете прогнозируемые значения 4 возможных примеров ввода.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(nnxor)C:UsersIEUser>cd nnxor
(nnxor)C:UsersIEUsernnxor>python nnxor.py
Using TensorFlow backend.
Epoch1/5000
2018-09-1609:49:05.987096:Itensorflow/core/platform/cpu_feature_guard.cc:141]Your CPU supports instructions that thisTensorFlow binary was notcompiled touse:AVX AVX2
2018-09-1609:49:05.993128:Itensorflow/core/common_runtime/process_util.cc:69]Creating newthread pool with defaultinter op setting:2.Tune using inter_op_parallelism_threads forbest performance.
Как вы определите X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]), ожидаемые входные округленные значения станут равны 0,1,1 и 0, что согласуется с прогнозами сети.
Машинное обучение применяется в различных областях, охватывая все большую аудиторию. Тем не менее, создание среды может быть сложней задачей. В этой статье вы узнали об основах создания среды Python на Windows с использованием Anaconda. Теперь, когда у вас есть основа, пришло время начать работу с настоящими приложениями.
Источник: Настройка Python для машинного обучения on Realpython