GraphNet: узлы и блоки
🤖 Добро пожаловать в мир нейросетей!
Представь, что у тебя есть большой набор Лего. Из деталей можно построить дом, машину, космический корабль или даже целый город.
А теперь вообрази, что у нас есть не обычные кубики, а особые блоки – они умеют читать данные, учиться, предсказывать и запоминать результаты.
Эти блоки – это части нейросети. Когда мы соединяем их стрелочками, они начинают работать вместе, как одна большая команда.
Можно собрать нейросеть, которая узнаёт цифры на картинках, угадывает, что будет дальше в таблице, или даже предсказывает результаты игры!
Наш графовый конструктор – это как мастерская:
Так шаг за шагом мы будем строить собственных умных помощников!
Прежде, чем приступить к проектированию нейросетей необходимо вспомнить теоретический минимум. Тетрадка GoogleColab, которая используется в видео для объяснения теоретического минимума.
Инструкция по установке
- Скачайте exe файл на компьютер: ссылка на установщик.
- Запустите файл.
🔗 Принципы работы конструктора
В нашем конструкторе всё очень похоже на игру с деталями:
- Каждый блок выполняет свою роль.
🧩 Один умеет читать данные,
🧠 другой — думать и учиться,
🎯 третий — делать предсказания. - Блоки нужно соединять стрелочками — так информация «путешествует» от одного блока к другому.
- У каждого блока есть вход (куда данные приходят) и выход (что блок отдаёт дальше).
- Если соединить блоки правильно, получится цепочка шагов, которая превращает сырые данные в умный результат.
📌 Запомни: блоки — как участники команды. Каждый делает своё дело, но только вместе они становятся настоящей нейросетью!
🚪 Входной слой (стартовый блок)
- Что это: первая дверь, через которую данные входят в нейросеть.
- Аналогия: как ворота на стадион – без них никто не зайдёт.
- Важно: этот блок нельзя удалить и пересоздать – он всегда один и главный, создается вместе с холстом.
Узел входного слоя нейросети. Если его удалить, то нельзя создать заново. С него начинается создание нейросети и в нём указывается размерность входных в данных для нейросети. Аккуратнее не удалите его!
📊 Табличные данные
- Что это: блок, который читает данные из таблицы (CSV-файла).
- Аналогия: как официант, который приносит еду с тарелками и подписывает, где чья.
- Параметры:
Чтобы получить путь к файлу, скопируйте его у файла в компьютере через правую кнопку мыши (ПКМ):
Подключаемый файл может быть в формате CSV, TXT, главное, чтобы содержимое было как у CSV данных - значений с разделителем.
Узел табличных данных, читает все данные табличного ввида, в shape храниться их размерность.
🧩 Категориальные данные
- Что это: переводит текст или классы в числа, которые понимает нейросеть.
- Аналогия: переводчик, который объясняет роботу: «кошка = 0, собака = 1».
- ⚙️ Параметры:
Узел для перевода данных в категориальные, num_classes - количество возможных категорий
Полносвязный слой
Что делает: это слой, где каждый нейрон соединён со всеми входами. Он получает всю информацию сразу и учится находить в ней закономерности.
Аналогия:
Представь класс, где учитель задаёт вопрос. Каждый ученик слышит вопрос и думает над своим ответом. Потом все вместе формируют общий результат.
- чтобы собрать воедино все признаки из предыдущих слоёв,
- чтобы научиться принимать решения (например, «это кошка или собака?»),
- часто используется в конце сети для финального ответа.
units— сколько учеников в классе (нейронов),activation— как они «отвечают» (например: уверенно или осторожно).
Узел полносвязного слоя нейросети, units - количество нейронов, activation - функция активации
🖼️ Свёрточный слой (2D)
- Что это: ищет узоры и фрагменты в картинках.
- Аналогия: как лупа, которая «сканирует» кусочки изображения.
- ⚙️ Параметры:
Узел двухмерного свёрточного слоя нейросети, filters - количество ядер свёрток, kernel_size - размер стороны (квадрата), strides - длина шага, padding - обёртка вокруг исходного изображения, activation - функция активации.
🌊 Pooling-слой
- Что это: уменьшает картинку, выбирая только главное.
- Аналогия: как делать мини-версию фотографии.
- ⚙️ Параметры:
Слой нейросети MaxPooling2D, pool_size - стороны квадрата, strides - шаг, padding - обёртка
🤝 Слой объединения
- Что это: собирает воедино то, что пришло из разных блоков.
- Аналогия: как корзинка, в которую складывают все яблоки с разных деревьев.
📏 Слой выпрямления (Flatten)
- Что это: делает из многомерного массива длинный список.
- Аналогия: как если сложить бельё в одну ровную стопку.
Слой выпрямления, преобразует многомерные массив на входе в одномерный.
➕ Слой сложения
- Что это: складывает данные поэлементно.
- Аналогия: как если у двух команд сложить очки игроков друг с другом.
🎓 Узел обучения (Training)
- Что это: обучает нейросеть на примерах.
- Аналогия: как тренировка у спортсмена — повторять действия много раз.
- ⚙️ Параметры:
Узел обучения, обучает нейросеть, которая приходит на вход, x, y - данные для обучения, epochs - количество итераций обучения.
🛠️ Узел компиляции (Compile)
Узел компиляции (сборки) модели,optimizer - оптимизатор для обучения, а loss - лосс функция для обучения.
🔮 Узел предсказания (Prediction)
Что это: блок, который берёт обученную модель и новые данные, чтобы сделать прогноз.
Аналогия: как гадалка или оракул, но не магия, а математика 🙂
Модель училась предсказывать оценки по таблице → даём новые данные → получаем прогноз: «будет 4 или 5».
Зачем нужен: именно этот блок отвечает за то, чтобы сеть применяла полученные знания на практике.
Узел предсказания, модель передаётся на вход и делает предсказания по переданным в узел данным
💾 Сохранение модели (.keras)
Узел сохранения модели, сохраняет модель в виде .keras файла
📐 Узел метрик
- Что это: блок, который проверяет, насколько хорошо работает модель. Он сравнивает правильные ответы и предсказания.
- Аналогия: как учитель проверяет тетрадь ученика — смотрит, где ответы совпали, а где ошибки.
- Зачем нужен: помогает понять, правильно ли работает нейросеть и где её нужно доучить.
- Модель предсказывает, что на картинке «кошка», а правильный ответ — «кошка» → метрика точности растёт.
- Если же модель ошиблась → метрика показывает, что нужно тренироваться больше.
- metric — что именно считаем (например, точность, ошибка, F1-score),
x, y— два массива для сравнения (правильные ответы и предсказания),data— здесь сохраняется результат (чтобы потом его можно было сохранить в файл).- ⚙️ Параметры:
Узел расчёта метрики: выбираете метрику которую хотите рассчитать, передаёте 2 массива, между которыми будете рассчитывать и в data напишется метрика, которую потом можно сохранить.
🖼️ Узел визуализации архитектуры (Model Visualization)
- Что это: блок, который рисует схему нейросети и сохраняет её картинкой.
- Аналогия: как архитектор рисует план здания, чтобы было понятно, где комнаты и лестницы.
- Зачем нужен: чтобы увидеть всю сеть целиком и понять, как она устроена.
📌 Пример:
Ты собрал сеть из нескольких слоёв → запускаешь этот блок → получаешь красивый чертёж, где видно, какие блоки связаны и как они работают.
show_shapes— показывать ли размеры данных на входе и выходе слоёв,show_layer_activations— показывать ли функции активации у слоёв.
Узел визуализации архитектуры модели, создаёт картинку архитектуры модели и сохраняет её, show_shapes - показывать размерности на входах \ выходах слоёв, show_layer_activations - показывать функции активации слоёв.
📂 Узел сохранения данных (Save Data)
- Что это: блок, который сохраняет результаты работы нейросети — предсказания или метрики.
- Аналогия: как тетрадь или дневник, куда ты записываешь свои оценки, чтобы потом их показать.
- Зачем нужен: чтобы не потерять результаты и использовать их позже (например, для отчёта или анализа).
- Нейросеть предсказала оценки по ученикам → сохраняем в файл, чтобы учитель посмотрел.
- Посчитали точность работы модели → сохраняем метрику, чтобы сравнить с другой моделью.
Узел сохранения данных, можно сохранить результат предсказаний или рассчитанную метрику.
📜 Узел сохранения модели в JSON (Save Model as JSON)
- Что это: блок, который сохраняет «чертёж» нейросети в текстовом формате JSON.
- Аналогия: как записать рецепт блюда на бумаге — потом его можно повторить по шагам.
- Зачем нужен: чтобы хранить структуру модели (какие слои и как соединены), а не сами обученные веса.
- Ты собрал нейросеть из слоёв → сохранил её как JSON → через неделю можешь снова загрузить и обучить заново.
Практическая работа 1. Самая простая нейросеть (табличные данные → обучение → предсказание)
В видео ниже познакомимся с конструктором нейросетей GtaphNet на примере решения практической задачи линейной регрессии. Данные для задачи, которая разбирается в примере.
🚪 Входной слой
⬇
📊 Табличные данные
⬇
🧠 Полносвязный слой (Dense)
⬇
🛠️ Компиляция (Compile)
⬇
🎓 Обучение (Training)
⬇
🔮 Предсказание (Prediction)
⬇
📂 Сохранение данных
📖 Что делает: читает таблицу → обучает сеть → делает предсказание → сохраняет результат.
Устройство узлов и работа с ними.
Чтобы загрузить наши данные, мы используем специальные «узлы» под названием Tables data. Они помогают работать с таблицами вроде нашей, где записаны температуры и количество рыб.
Cначала мы создаём три «коробочки с данными» — это специальные узлы:
- Тренировочные данные – здесь лежат параметры (в данном случае температура) – ваш файл
x_train. - Тренировочный таргет – это правильные ответы, то есть сколько было голомянок – файл
y_train. - Тестовые данные – для предсказания количества голомянок по температуре – файл
x_test.
Мы загружаем нужные файлы в эти коробочки, нажимая Choose file….
Теперь важный шаг: нужно соединить форму данных (shape) из узла с тренировочными параметрами с узлом Input, который уже есть в редакторе. Это как будто мы говорим: «Вот такие данные будут входить в модель».
После этого создаём саму модель. Вспомним: нейрон — это почти как линейная формула, но иногда с добавкой под названием «функция активации». Если выбрать простую линейную активацию, то получится обычная линейная регрессия.
Для этого мы создаём узел Dense:
- указываем units = 1 (значит, модель будет предсказывать одно число — количество голомянок),
- ставим activation = linear (чтобы была линейная зависимость).
И соединяем этот узел с Input.
Дальше нам нужно скомпилировать нашу модель. Для этого есть специальный узел - Compile model. Соединим его вместе с Dense. Укажем loss = mean_absolute_error.
Теперь у нас есть модель, но она пока «пустая» — она не умеет предсказывать. Нужно запустить её обучение. Для этого мы добавляем специальный узел Fit model.
- узел Compile model соединяем с входом self у Fit model (это как кнопка «готово к обучению»),
- узел Table data (1) (там лежат наши параметры, например, температура) соединяем с входом x у Fit model,
- узел Table data (2) (там правильные ответы — количество голомянок) соединяем с входом y у Fit model.
Получается, что модель берёт «температуру» как вход и «количество голомянок» как правильный ответ, и начинает учиться находить зависимость между ними.
Когда модель учится, это происходит по кругу. Такой круг называется эпоха. На каждой эпохе модель сначала пытается предсказать данные, потом мы говорим ей, где она ошиблась, и она исправляет свои ошибки.
В нашей задаче точное число эпох не так важно. Но вообще, если эпох будет слишком много, модель «заучит» данные и перестанет работать на новых примерах (это называется переобучение). А если эпох будет слишком мало, она не успеет нормально научиться. Для примера поставим 500 эпох.
После обучения мы хотим проверить, насколько хорошо модель справляется. Для этого делаем так:
- Создаём узел Predict – он будет делать предсказания.
- Создаём узел Save data и подключаем к нему Predict, чтобы сохранить предсказания.
В итоге у нас получится цепочка:
Данные → Input → Dense → Compile → Fit → Predict → Save data.
Когда все узлы соединены, остаётся только запустить нашу схему. Для этого внизу нажимаем кнопку «Собрать модель».
Если всё сделано правильно, модель начнёт учиться и потом сделает предсказания.
В папке с проектом должен появиться файл result.txt — это и есть результат работы модели, то есть предсказанные количества голомянок.
Практическая работа 2. Проектируем нейросеть с несколькими слоями
Рассмотрим более сложный пример по проектированию нейросети. В нем будет несколько слоев. Данные для задачи, которая рассмотрена в примере. Посмотрите разбор примера внимательно. Подумайте, что влияет на качество модели? Как можно ее улучшить?
📝 Вопросы и ответы по графовому конструктору GrahpNet
Что делать, если приложение GraphNet не работает?
Если при проектировании нейросети, в конструкторе GraphNet появилась ошибка и приложение отказывается работать, зафиксируйте ошибку и отправьте отчет разработчикам. Как это сделать описано в инструкции.
Ссылки на проект
⭐️ Поддержите проект звездочкой на github: https://github.com/jezvgg/graphNet
🚀 Следите за релизами: https://github.com/jezvgg/graphNet/releases