Вы когда-нибудь хотели, чтобы кто-то за вас решил, что приготовить на обед из имеющихся продуктов? Чтобы этот кто-то собрал готовое блюдо, словно конструктор, из имеющихся пазлов: морковь, сельдерей, курица, грибы, помидоры, картофель. Кто бы это мог быть? Или даже что? Ответ прост — это нейросеть!
В этой статье мы не просто поговорим о том, как создать свою нейросеть, как ее натренировать, как протестировать и подготовить к использованию. Мы обучим ее с нуля на наборе рецептов со множеством продуктов, проверим ее работу и запустим на облачном сервере от Timeweb Cloud.
Серверы с GPU
процессорами для параллельных вычислений: ИИ,
3D, бигдата, IoT, гейминг, научные вычисления.
Основы нейросетей: что нужно знать перед созданием
Перед тем как сделать нейросеть, необходимо разобраться, как она работает — каково ее внутреннее устройство и как выглядит ее архитектура.
Продолжая язык метафор, вы могли бы представить опытного кулинара, который за долгие годы практики научился лишь по виду ингредиентов определять блюдо, которое из них возможно приготовить.
Мозг кулинара, будучи органической нейросетью, имеет такую синаптическую развесовку, которая позволяет логически соединять выходные данные с входными. На вход — список продуктов, на выход — готовое блюдо.
Точно так же работает цифровая нейросеть, запущенная на компьютере: на входе — данные (ингредиенты), а на выходе — результат (описание блюда).
Если рассматривать нейросеть с точки зрения математики, то это набор слоев, где каждый слой учится находить закономерности. Чем больше данных и слоев, тем умнее нейросеть.

Базовая архитектура нейросети (источник: Unisender)
Разумеется, существует множество нейросетевых архитектур — у каждой свои особенности и нюансы. Однако в рамках этой статьи мы рассмотрим лишь три основных и наиболее популярных:
- Полносвязные (Dense). Каждый нейрон предыдущего слоя связан со всеми нейронами следующего, что позволяет находить сложные зависимости между признаками. Применяются в задачах классификации и регрессии на табличных данных или векторных представлениях.
- Рекуррентные (RNN, LSTM, GRU). Каждый нейрон получает не только текущие входные данные, но и свое собственное предыдущее состояние. Это обеспечивает моделирование последовательностей и запоминание контекста. Применяются для обработки текстов, временных рядов и других данных, где важен порядок элементов.
- Сверточные (CNN). Нейроны связаны лишь с локальными участками предыдущего слоя через один и тот же фильтр. Это позволяет обнаруживать повторяющиеся локальные признаки по всему входу, эффективно выделяя границы, текстуры и объекты. Широко применяются в задачах классификации, детекции и сегментации изображений.
В нашем генераторе рецептов мы будем использовать архитектуру рекуррентных нейросетей LSTM, ведь нам необходимо очень точно обрабатывать текст — последовательность слов, от которой зависит конечный смысл.
Узнать еще больше об основах работы с нейросетями можно в отдельной статье от Timeweb Cloud — в ней подробно рассмотрены примеры нейросетей, написанных на языке программирования Python.
Подготовка к созданию нейросети
Перед непосредственным созданием нейросети сперва необходимо подготовить все необходимые инструменты и настроить окружение, в котором будет функционировать нейросеть.
Точно так же, как повар сначала раскладывает ножи, кастрюли и специи, мы подготовим все необходимое перед началом «готовки» искусственного интеллекта.
Языки и библиотеки
Язык программирования Python — де-факто стандарт для написания нейросетей. Идеальное решение с простым синтаксисом и богатым функционалом. И библиотек в нем предостаточно! Особенно для нейросетей:
- TensorFlow. Библиотека от Google для разработки и обучения моделей машинного обучения, в которой вычисления описываются в виде графа операций над тензорами. Именно эта библиотека будет использоваться в этом руководстве.
- PyTorch. Библиотека для динамического построения вычислительных графов «на лету», упрощающая отладку и экспериментирование с архитектурами нейросетей.
- pandas. Высокоуровневая библиотека для удобной и эффективной обработки структурированных данных — Series (одномерный массив меток) и DataFrame (двумерная табличная структура). Позволяет читать и записывать данные из CSV, Excel, SQL и других форматов, а также выполнять фильтрацию, группировку, агрегацию, объединение и преобразование данных. В общем, незаменимый инструмент в анализе данных и машинном обучении.
- pickle. Встроенный инструмент для сериализации и десериализации объектов, способный преобразовывать практически любые Python-сущности (списки, словари, классы) в байтовую последовательность и обратно. Таким образом можно сохранять состояние объектов на диск или передавать их по сети. Идеальный инструмент для сохранения обученных моделей машинного обучения, промежуточных результатов обработки данных и других сложных структур.
- json. Инструмент для чтения и записи текстовых данных в человекочитаемом формате JSON, основанном на структуре «ключ–значение» и списках. Необходим для универсальной передачи данных между приложениями и сервисами при построении REST API.
Для лучшего понимания разницы между двумя описанными библиотеками (TensorFlow и PyTorch) можно представить их общие характеристики в формате таблицы:
|
TensorFlow |
PyTorch |
|
|
Синтаксис |
формальный |
гибкий |
|
Популярность |
корпоративная среда |
научная среда |
|
Визуализация |
да (через TensorBoard) |
нет (по умолчанию) |
|
Уровень контроля |
низкий |
высокий |
|
Поддержка |
от Google |
от Facebook |
Все скрипты, демонстрируемые в этом руководстве, запускались с помощью интерпретатора Python версии 3.10.12.
Среда обучения
Обучение нейросети может требовать значительных вычислительных ресурсов — особенно при работе с большими объемами данных и сложными архитектурами.
Именно поэтому для обучения моделей используются облачные серверы, позволяющие выполнять тренировку в изолированной среде с нужной конфигурацией.
Timeweb Cloud предоставляет возможность быстро развернуть облачный сервер с необходимыми параметрами. Это особенно удобно для разработки и тестирования нейросетей, а также для последующего размещения приложений на базе ИИ.
Для создания сервера сперва необходимо авторизоваться в панели управления Timeweb Cloud, после чего можно перейти во вкладку Облачные серверы и нажать на кнопку Создать.
Откроется страница с конфигуратором облачного сервера. В рамках этого руководства подойдет операционная система Ubuntu 22.04 с минимальными параметрами (2 CPU, 4 GB RAM) — этого более чем достаточно для обучения нейросети.
Теперь можно выполнить установку Python:
И установить основные библиотеки для работы с нейросетями:
Некоторым пользователям может оказаться полезным инструмент для интерактивных вычислений, в котором пользователь может создавать документы с исходным кодом, текстом на Markdown, формулами LaTeX, визуализациями и результатами выполнения — Jupyter Notebook. Почитать о его установке и использовании можно в отдельной статье от Timeweb Cloud.
Пошаговое создание нейросети
После предварительной подготовки можно перейти к созданию простой, но точной нейросети, которая по списку ингредиентов будет предлагать подходящие блюда — не просто распознавать шаблоны, а находить связи между наборами продуктов и готовыми рецептами. Это хороший и легкий старт для тех, кто хочет на практике разобраться в устройстве ИИ-систем.
Подготовка данных
Для обучения нейросети прежде всего нужны данные — с помощью них она поймет, как находить закономерности.
Несмотря на то что в Интернете есть множество готовых наборов данных (например, зарубежный датасет с рецептами и списком ингредиентов), в этом руководстве мы создадим свой собственный тестовый датасет на 100 строк — этого достаточно для задач распознавания начального уровня.
Рецепты и ингредиенты будут простыми — мы создаем не серьезный проект, а лишь разбираемся в устройстве нейросетей.
Сперва необходимо создать CSV-файл recipes.csv, содержащий список пар «ингредиенты: рецепт»:
Все строки показывать не имеет смысла. Главное — понятна суть. Разумеется, рецепты можно усложнить, сделав более правдоподобными — подходящими под названия реальных блюд.
Важно понимать следующее: ingredients — строка с перечнем продуктов через запятую, recipe — название блюда.
Обучение модели
Подготовив данные, можно перейти к самому интересному — к обучению нейросети. Для этого создадим отдельный файл train_model.py, который будет содержать код на языке Python:
Генерация рецептов
Теперь, когда модель обучена и сохранена, можно перейти к следующему этапу — научить ее отвечать на запросы пользователя и генерировать рецепты готовых блюд.
Для этого необходимо создать отдельный скрипт generate.py, в обязанности которого будет входить:
- Загрузка обученной модели и вспомогательных данных.
- Прием списка ингредиентов.
- Возврат наиболее вероятных рецептов.
Полный код исходного файла generate.py выглядит следующим образом:
Тестирование
Сервер готов, модель обучена, а скрипт генерации успешно работает — самое время проверить, как написанная нейросеть справляется со своей главной задачей.
Тестирование в данном случае не требует сложных методик — наша цель не получить 99,9% точности, а убедиться в том, что модель логично и стабильно работает на датасете в 100 строк.
Теперь можно зайти на сервер с установленным Python (и библиотеками tensorflow и pandas) и создать директорию проекта:
После чего переходим в созданный каталог:
Далее необходимо разместить на удаленном сервере три файла, подготовленных ранее: recipes.csv, train_model.py, generate.py.
Есть два способа это сделать:
- Создать файлы на удаленном сервере и скопировать в них код с локальной машины.
- Скопировать файлы на удаленный сервер с локальной машины с помощью утилиты Secure FTP (SFTP).
После этого можно запустить скрипт train_model.py для обучения нейросети:
Если все настроено правильно, то в консоли появится прогресс обучения по эпохам.
Тут стоит обратить внимание на важный момент: при запуске обучения на сервере без графического процессора (без GPU, но с CPU) библиотека TensorFlow выводит предупреждающие сообщения в консольный терминал.
Они никак не влияют на итоговый результат обучения и носят исключительно информационный характер.

По завершении обучения в папке проекта появится 3 файла:
recipe_model.keras— обученная модель.tokenizer.pki— словарь токенов.index_to_recipe.json— словарь индексов.
Теперь можно проверить работу модели на практике:

Что можно улучшить
Нет предела совершенству! Любую созданную модель можно продолжить развивать — выполнять дообучение, улучшать архитектуру, корректировать данные.
А еще можно превратить готовую нейросеть в полноценный сервис:
- Добавить Telegram-бота для генерации рецептов прямо в чате. Кстати, у Timeweb Cloud есть отдельная инструкция по созданию и деплою чат-бота.
- Расширить датасет до 1000+ строк. А лучше до 10000+!
- Добавить предобработку с использованием таких инструментов, как FastText или Word2Vec.
- Перейти к генерации текста, а не классификации, используя архитектуру Sequence-to-Sequence (seq2seq).
Разумеется, подобные улучшения требуют более глубоких знаний в области машинного обучения, которые находятся за пределами этого вводного руководства.
Подготовили для вас выгодные тарифы на облачные серверы
477 ₽/мес
657 ₽/мес
Заключение
В этом коротком руководстве был пройден весь путь создания нейросети — от разбора основ до обучения простой модели с запуском в облаке Timeweb Cloud.
Разработанная реализация помогает разобраться в основных машинного обучения, становясь основой для дальнейшего развития, описанного в предыдущем разделе.
Как видно, нейросети — не магия, а инструмент. Если приложить достаточное количество усилий, то собрать собственную ИИ-систему не так уже сложно.
