Всем привет.
Решил поделиться простым и ёмким на мой взгляд решением нейронной сети на С++.
Почему эта информация должна быть интересна?
Ответ: я старался в минимальном наборе запрограммировать работу многослойного перцептрона, да так, чтобы его можно было настраивать как душе угодно всего в нескольких строчках кода, а реализация основных алгоритмов работы на «С» позволит с лёгкостью переносить на «С» ориентированные языки(в прочем и на любые другие)
без использования сторонних библиотек!
Прошу взглянуть на то, что из этого вышло
Про
предназначение нейронных сетей я вам рассказывать не буду, надеюсь вас не забанили в
google и вы сможете найти интересующую вас информацию(назначение, возможности, области применения и так далее).
Исходный код вы найдёте в конце статьи, а пока по порядку.
Начнём разбор
1) Архитектура и технические подробности
—
многослойный перцептрон с возможностью конфигурации любого количества слоев с заданной шириной. Ниже представлен
пример конфигурацииmyNeuero.cpp
inputNeurons = 100; //ширина входного слоя
outputNeurons =2; //ширина выходного слоя
nlCount = 4; //количество слоёв ( по факту их 3, указываемое число намеренно увеличено на 1
list = (nnLay*) malloc((nlCount)*sizeof(nnLay));
inputs = (float*) malloc((inputNeurons)*sizeof(float));
targets = (float*) malloc((outputNeurons)*sizeof(float));
list[0].setIO(100,20); //установка ширины INPUTS/OUTPUTS для каждого слоя
list[1].setIO(20,6); // -//-
list[2].setIO(6,3); // -//-
list[3].setIO(3,2); // -//- выходной слой
Обратите внимание, что установка ширины входа и выхода для каждого слоя выполняется по определённому правилу — вход текущего слоя = выходу предыдущего. Исключением является входной слой.
Таким образом, вы имеете возможность настраивать любую конфигурацию вручную или по заданному правилу перед компиляцией или после компиляции считывать данные из source файлов.
Читать дальше →