Словосочетание «машинное обучение» становится всё более значимым с каждым годом и проникает во все возможные сферы жизни, а с появлением в открытом доступе таких нейронных сетей как Chat GPT [1] интерес к машинному обучению стал высок как никогда. Но при этом многих отпугивает сложность создания своих систем на основе машинного обучения, потому что нужно одновременного использовать и настраивать много разных инструментов разработки.

Поэтому я хочу представить вашему вниманию максимально простую инструкцию для быстрого погружения в мир машинного обучения. Инструкция ориентирована в первую очередь на начинающих программистов, мы будем применять Python 3 [2] с библиотекой TensorFlow [3]. Это лучший выбор для начинающих из-за простоты языка и большого сообщества разработчиков, использующих TensorFlow.

Совместимость оборудования и выбор версии TensorFlow

Ваш процессор должен поддерживать AVX-инструкции [4], а видеокарта должна поддерживать архитектуру CUDA начиная с версии 3.5 (список подходящих видеокарт [5]):

  • AVX (Advanced Vector Extensions) — это расширение системы команд x86-архитектуры для микропроцессоров Intel и AMD, предложенное Intel в марте 2008 года.

  • CUDA (Compute Unified Device Architecture) — это программно-аппаратная архитектура параллельных вычислений, разработанная компанией NVIDIA. Она позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров (GPU).

Далее я буду говорить о TensorFlow 2.10, так как последующие версии требуют установки Windows Subsystem for Linux (использование WSL усложнит установку и ограничит количество подходящих версий Windows). TensorFlow 2.10 будет работать на Windows 7 и более новых версиях операционной системы. Версия Python должна быть от 3.9 до 3.11.

Установка необходимого программного обеспечения

Нужно начать с пакета Microsoft Visual C++ для Visual Studio 2015, 2017 и 2019. Далее установите Python с минимальным набором библиотек и менеджером пакетов — лучше всего для этого подходит Anaconda [6]. Она содержит в себе дистрибутив языка Python, систему управления средой разработки Anaconda Navigator (визуальный менеджер пакетов, управление дополнительным софтом и т. д.) и базовый набор библиотек. Но если вы не фанат визуальных сред разработки или не хотите ставить лишние программы на компьютер, то можно ограничиться Miniconda (это то же самое, что и Anaconda, но без лишних программ, только библиотеки и консольный менеджер пакетов Conda) [7]. 

После установки Anaconda нужно запустить Anaconda Powerschell Prompt и выполнить в консоли команду:

conda create --name tf python=3.9

Она создаст новую среду conda (в рамках одной среды можно использовать определённый набор библиотек, это полезно, если для разных проектов нужны разные версии библиотек) и установит для неё Python 3.9.

Затем с помощью команды activate активируем созданную выше среду (deactivate возвращает базовую среду):

conda activate tf
conda deactivate

Теперь нужно установить свежие драйверы для вашей видеокарты [8], а если они у вас установлены, то можно переходить к установке пакетов CUDA и cuDNN. Это можно сделать выполнив одну команду:

conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0

Указанные выше версии пакетов лучше не менять, так как могут быть проблемы с совместимостью библиотек. Выполнение этой команды выглядит так:

Установка TensorFlow

Для корректной работы TensorFlow требует свежая версия pip (это менеджер пакетов). Обновите его:

pip install --upgrade pip

TensorFlow можно установить и через conda (или через Anaconda Navigator), но разработчики TensorFlow рекомендуют использовать именно pip. Устанавливаем:

pip install "tensorflow<2.11"

Проверка TensorFlow

Нужно удостовериться, правильно ли всё настроено и установлено. Для этого выполните в консоли или вашей среде разработки код:

import tensorflow as tf

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    for gpu in gpus:
      tf.config.experimental.set_memory_growth(gpu, True)
    logical_gpus = tf.config.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
  except RuntimeError as e:
    print(e)

Очень удобно для разработки использовать IDE Spyder, если её установить с помощью Anaconda Navigator для нужной среды. Выглядит установка так (выбираем среду и нажимаем установить):

Обратите внимание на текущую среду, ибо именно в неё будет установлено выбранное ПО. После установки вы можете запустить Spyder из Навигатора от имени выбранной среды (это значит, что будут доступны библиотеки, которые загружены именно для среды tf).

Теперь выполняем код в консоли, который я приводил выше:

Если всё правильно сделано, то система должна вывести список доступных для TensorFlow устройств (в моем случае это видеокарта RTX 3060).

Тестовый проект на основе TensorFlow

Пришло время создать первый проект, использующий библиотеки машинного обучения. Для теста возьмём стандартный проект классификации ирисов [9]. Создайте скрипт с расширением .py и таким кодом:

Код
import pandas as pd
import numpy as np
import os

# Plotting libraries
import matplotlib.pyplot as plt


# SKLearn libraries
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split

# Tensorflow libraries
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential

def get_model():
    model = Sequential([
        keras.layers.Input(shape=X_train.shape[1:]),
        keras.layers.Dense(1000, activation='relu'),
        keras.layers.Dense(500, activation='relu',),
        keras.layers.Dense(300, activation='relu'),
        keras.layers.Dropout(0.2),
        keras.layers.Dense(3, activation='softmax')
    ])

    return model

# Data file path
FILE_PATH = './IRIS.csv'

# Dataframe from csv file
iris_data = pd.read_csv(FILE_PATH, header=0)

iris_data.info()
print("=="*40)
iris_data.head(10)

X = iris_data.loc[:, iris_data.columns != 'species']
y = iris_data.loc[:, ['species']]

y_enc = LabelEncoder().fit_transform(y)
# Converting the label into a matrix form
y_label = tf.keras.utils.to_categorical(y_enc)

# X_train_full, X_test, y_train_full, y_test = train_test_split(X, y_label, test_size=0.15)

# Validation set
# X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full)

X_train, X_test, y_train, y_test = train_test_split(X, y_label, test_size=0.3)

print(f"Train shape : {X_train.shape}, Y Train : {y_train.shape}")
print(X_train.shape[1:])

model = get_model()

# Compile the model
model.compile(optimizer='adam',
              loss=keras.losses.CategoricalCrossentropy(),
             metrics=['accuracy'])

history = model.fit(X_train, y_train, epochs=30, validation_data=(X_test, y_test), verbose=1)

model.evaluate(X_test, y_test)

pd.DataFrame(history.history).plot(figsize=(10,6))
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()

new_data, y_actual = X_test[:3], y_test[:3]

y_proba = model.predict(new_data)

print(f"Actual data : {y_actual}")

for pred in y_proba:
    print(np.argmax(pred))

По ссылке [9] скачайте файл IRIS.csv из раздела «Входные данные» и разместите его в одной папке со скриптом. Этот файл содержит исходные данные для обучения модели. Затем запустите выполнение скрипта и дождитесь его завершения:

Если скрипт отработал корректно, в конце вы увидите график обучения модели в разделе Plots.

Примечание: при первой попытке выполнения этого скрипта интерпретатор выдаст ошибку об отсутствии необходимых библиотек. При реализации своих проектов вам придётся использовать и устанавливать различные библиотеки. Устанавливать их можно разными способами консольными менеджерами пакетов (pip или conda) или визуальным менеджером пакетов Anaconda Navigator. Старайтесь использовать только один способ, иначе может возникнуть путаница и конфликты между разными версиями библиотек. Я обычно использую визуальную установку через Anaconda Navigator, это позволяет более наглядно контролировать набор установленных пакетов и их версии. Пример визуальной установки пакета для программы классификации ирисов:

Для установки пакета активируем вашу среду (tf в моём случае), выбираем раздел «Неустановленные», в поле поиска (справа) вводим название требуемой библиотеки, ставим на ней галочку и нажимаем Apply. После установки всех необходимых библиотек, которые импортируются в начале скрипта, программа классификации ирисов должна работать.

На этом этапе можно поздравить вас с первым запуском проекта на основе TensorFlow. Теперь вы точно готовы к реализации своих проектов с применением технологий машинного обучения. 

Желаю вам успехов во всех ваших будущих проектах и спасибо за внимание. До новых встреч.

Ссылки

  1. https://openai.com/

  2. https://www.python.org/

  3. https://www.tensorflow.org/

  4. https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX

  5. https://developer.nvidia.com/cuda-gpus

  6. https://docs.anaconda.com/free/anaconda/install/windows/

  7. https://docs.anaconda.com/free/miniconda/

  8. https://www.nvidia.com/download/index.aspx

  9. https://www.kaggle.com/code/venkatkrishnan/iris-data-tensorflow-neural-network/notebook

Комментарии (6)


  1. Aizz
    06.06.2024 07:25

    Я, конечно, не спец, но для новичка (да и в целом) PyTorch будет лучше TensorFlow, нет? Нативный питон, куча информации, проще в обучении.


    1. Vindicar
      06.06.2024 07:25

      А вот хороший вопрос. Я сейчас переписываю часть лабораторных с tensorflow на pytorch.

      У tensorflow какой-то бардак с версиями сейчас. На питоне 3.9 всё работает норм, а вот на более новых то одно ломается, то другое. Собственно, почему с tensorflow и перелезаю.

      Зато pytorch меня подкосил тем, что при кривом задании конвейера предобработки изображений выжрал всю оперативку так, что машина зависла наглухо. Только хард-резет помог. И это, на минуточку, не под cuda - это на cpu. Тензорфлоу себе такого не позволял. =)


    1. CrazyElf
      06.06.2024 07:25

      Так тут вообще высокоуровневый Keras используется, а не чистый TF. А Keras очень удобен для начинающих, там всё относительно просто делается.


    1. red_elk
      06.06.2024 07:25

      По поводу проще в обучении - не факт. Но tensorflow теряет популярность сейчас, большинство новых опенсорс проектов используют PyTorch. Плюс новый Keras уже может использовать PyTorch в качестве бэкенда. В общем выглядит так что TF постепенно вытесняется и проигрывает в конкуренции.


  1. Jury_78
    06.06.2024 07:25

    так как последующие версии требуют установки Windows Subsystem for Linux

    А без windows никак? :)


  1. qss53770
    06.06.2024 07:25

    Ну статьи все скудней и скудней)) нужно было начать с того как запустить компьютер