Если вы хоть немного знакомы с машинным обучением, то, вероятно, слышали о TensorFlow, одном из самых популярных инструментов для проектирования, обучения и использования моделей машинного обучения. Хотя, конечно, можно выполнять задачи машинного обучения без заранее созданных инструментов, TensorFlow стал любимой экосистемой инструментов в сообществе ML, помогая людям запускать свои проекты по машинному обучению.
В этом руководстве я покажу вам, как начать использовать TensorFlow, и даже создадим довольно простую модель для обучения и использования.
Как работает TensorFlow?
Основные строительные блоки TensorFlow, и в целом ML, — это тензоры. Не вдаваясь в математику, тензоры — это группы алгебраических объектов (наиболее часто чисел), таких как скаляры, векторы или матрицы. Тензоры могут иметь любое количество измерений, что делает их формализацию очень полезной для работы с большими и многомерными наборами данных.
TensorFlow позволяет программистам работать с тензорами легким и эффективным способом и предоставляет дополнительную библиотеку, называемую Keras, для создания моделей машинного обучения на основе тензоров.
Что мы будем создавать?
Чтобы упростить задачу, мы создадим нейронную сеть, способную предсказывать результат логической операции AND (и). Наша модель будет принимать 2 значения (оба булевы) и выдавать 1 значение (тоже булево). Мы будем использовать 1 и 0 вместо true и false.
Входы и выходы должны следовать следующей логической таблице:
Вход 1 | Вход 2 | Выход |
---|---|---|
False (0) | False (0) | False (0) |
False (0) | True (1) | False (0) |
True (1) | False (0) | False (0) |
True (1) | True (1) | True (1) |
Настройка среды разработки
Прежде всего установите Python на свой компьютер, если его у вас еще нет. Простой процесс установки на Windows описан в этой статье.
Нам понадобиться pipenv — это инструмент для управления зависимостями и виртуальными средами в Python. После чего мы и установим Tensorflow.
Установка Pipenv
Pipenv можно установить с помощью pip, инструмента установки пакетов Python. Откройте терминал (или командную строку, если вы используете Windows) и выполните следующую команду:
pip install pipenv
Если вдруг получите ошибку с установкой (нет прав доступа), то просто перейдите к своей папки с Python (у меня, например, C:\Python311) и установите права для всех пользователей:
Создание нового проекта с использованием Pipenv
Перейдите в каталог вашего проекта в терминале и выполните следующую команду:
pipenv install
Эта команда создаст файл Pipfile и виртуальное окружение для вашего проекта.
Активация виртуальной среды
Ваша виртуальная среда автоматически активируется при входе в нее. Вы увидите, что ваш терминал теперь начинается с именем вашего проекта в круглых скобках.
(ваш_проект) $
Установка пакета Tensorflow
Наконец поставим «то зачем мы с вами здесь собрались», а, именно, пакет Tenslorflow:
pipenv install tensorflow
Запуск скриптов в виртуальной среде
Выполняйте свои скрипты Python в виртуальной среде, используя команду pipenv run. Например:
pipenv run python main.py
Эти шаги помогут вам установить и использовать Pipenv для управления зависимостями и виртуальной средой в вашем проекте Python.
Пишем и тестируем нашу первую нейросеть
Без лишних слов давайте приступим к написанию кода (комментарии даны в коде).
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# Определение входных и выходных данных для операции AND с типом float16
X_and = tf.constant([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=tf.float16)
Y_and = tf.constant([[0], [0], [0], [1]], dtype=tf.float16) # Логика операции AND
# Создание новой последовательной модели
model_and = keras.Sequential()
# Добавление слоев
model_and.add(layers.Dense(
4, # Количество нейронов
input_dim=2, # Задаем размер входа, подается два бита
activation='relu' # Используем функцию активации ReLU, так как все входы положительные
))
model_and.add(layers.Dense(
1, # Количество нейронов. Мы хотим один выход
activation='sigmoid' # Используем сигмоид, потому что мы хотим бинарную классификацию
))
# Компиляция слоев в модель
model_and.compile(
loss='mean_squared_error', # Функция потерь, которую мы минимизируем
optimizer='adam', # Наша функция оптимизации
metrics=['binary_accuracy'] # Метрики - различные значения, которые вы хотите отслеживать во время обучения
)
# Наша функция, которая принимает два числовых входа и возвращает соответствующий булев результат
def cleanPredictAnd(a, b):
inputTens = tf.constant([[a, b]], dtype=tf.float16)
return round(model_and.predict(inputTens)[0][0]) == 1 # model.predict(input) возвращает 2D тензор
print(cleanPredictAnd(1, 0)) # Вернет случайное значение, потому что модель еще не обучена
model_and.fit(
X_and, # Входные данные для обучения
Y_and, # Выходные данные для обучения
epochs=2000, # Количество итераций, на которое мы хотим обучить модель
verbose=1 # Уровень детализации при выводе в терминале во время обучения
)
# Тестирование для операции AND
print("Тестирование операции AND:")
print(f"Ожидаемый результат для (0, 0): 0, Получено: {cleanPredictAnd(0, 0)}")
print(f"Ожидаемый результат для (0, 1): 0, Получено: {cleanPredictAnd(0, 1)}")
print(f"Ожидаемый результат для (1, 0): 0, Получено: {cleanPredictAnd(1, 0)}")
print(f"Ожидаемый результат для (1, 1): 1, Получено: {cleanPredictAnd(1, 1)}")
Этот код создает и обучает нейронную сеть с использованием библиотеки TensorFlow для решения задачи логической операции AND. Входные данные (X_and) представляют собой все возможные комбинации двух битов, а выходные данные (Y_and) содержат соответствующие результаты операции AND.
Модель состоит из двух слоев: первый использует функцию активации ReLU с четырьмя нейронами, а второй — сигмоидную функцию активации с одним нейроном для бинарной классификации. Затем модель компилируется с функцией потерь mean_squared_error и оптимизатором Adam. После обучения на 2000 итерациях, код тестирует модель на четырех возможных входных комбинациях, выводя ожидаемые и полученные результаты операции AND.
Вот так будут выглядеть результаты тестирования (как видим они соответствуют истине):