Нейронные сети.

Пример программы нейронной сети с исходным кодом на с++.

Про нейронные сети хорошо и подробно написано здесь. Попытаемся разобраться как программировать нейронные сети, и как это работает. Одна из задач решаемых нейронными сетями, задача классификации. Программа демонстрирует работу нейронной сети классифицирующей цвет.

В компьютере принята трехкомпонентная модель представления цвета RGB, на каждый из компонентов отводится один байт. полный цвет представлен 24 битами, что дает 16 миллионов оттенков. Человек же может отнести любой из этих оттенков к одному из имеющих название цветов. Итак  задача:

Дано InColor - цвет RGB (24 бит)

классифицировать цвет, т.е. отнести его к одному из цветов заданных множеством М={ Черный, Красный, Зеленый, Желтый, Синий, Фиолетовый, Голубой, Белый }.

OutColor - цвет из множества М

Решение номер 1. (цифровое)

Создаем массив размером 16777216 элементов

int8 ColorTab [ 16777216 ];

инициализируем его правильными значениями.

Ответ получаем очень быстро

OutColor = ColorTab [ InColor ];

Решение номер 2. (аналоговое)

напишем функцию, типа

int8 GetColor(DWORD Color)
{
    double Red = (double(((Color>>16)&0xFF)))/255*100;
    double Green = (double(((Color>>8)&0xFF)))/255*100;
    double Blue = (double((Color&0xFF)))/255*100;
    double Level = Red;
    if(Green > Level)
        Level = Green;
    if(Blue > Level)
        Level = Blue;
    Level = Level * 0.7;
    int8 OutColor = 0;
    if(Red > Level)
        OutColor |= 1;
    if(Green > Level)
        OutColor |= 2;
   if(Blue > Level)
        OutColor |= 4;
   return OutColor;
}

Это будет работать если задачу можно описать простыми уравнениями, а вот если функция настолько сложна что описанию. не поддается, здесь то на помощь приходят нейронные сети.

Решение номер 3. (нейронная сеть)

Простейшая нейронная сеть. Однослойный перцептрон.

Все нейронное заключено в класс CNeuroNet

#define INCOUNT 3
#define NEUROCOUNTMAX 10

struct Neuron
{
   double x[INCOUNT];// входные сигналы
   double w[INCOUNT];// весовые коэффициенты
   double w0;// доп вес
   double sum;// сумма
   double y;// выход аксон
   double h;
};
class CNeuroNet
{
public:
   CNeuroNet(void);
   ~CNeuroNet(void);
   float ActiveSigm(float x);
   float ActiveSigmPro(float x);
   void ProcNeuro(Neuron& n);
   int Process();
   int Teach(int Num);

   int m_NeuroCount;
   Neuron m_Neuro[NEUROCOUNTMAX];

};

Каждый нейрон имеет 3 входа, куда подаются интенсивности компонент цвета. (R,G, B) в диапазоне (0 - 1).  Всего нейронов 8, по количеству цветов в выходном множестве. В результате работы сети на выходе каждого нейрона формируется сигнал в диапазоне (0 - 1), который означает вероятность того что на входе этот цвет. Выбираем максимальный и получаем ответ.

Нейроны имеют сигмоидную функцию активации  ActiveSigm(). Функция ActiveSigmPro(), производная от сигмоидной функции активации используется для обучения нейронной сети методом обратного распространения.

В первой строчке выведены интенсивности цветов. ниже таблица весовых коэффициентов (4 шт. ).  В последнем столбце значение на выходе нейронов. Меняем цвет, выбираем из списка правильный ответ, кнопкой Teach вызываем функцию обучения. AutoTeach вызывает процедуру автоматического обучения, 1000 раз, случайный цвет определяется по формуле из решения номер 2, и вызывается функция обучения.

скачать исходный код и программу нейронной сети

 

Программы

Remote Control - Программа для удаленного доступа к компьютеру.
ImageConverter - Программа для уменьшения фотографий.
AutoShutdown - Программа для автоматического выключения компьютера.
Work time counter - Простая программа для учета рабочего времени.
ClearFolders - Программа для массового удаления файлов.
SynchronizeFolders - Программа для синхронизации каталогов.
DiskSector - Утилита позволяет осуществлять чтение / запись секторов диска в / из файла.
ROPTest - Программа изображает все 256 вариантов флагов Ternary Raster Operations Codes, помогает определить необходимый код растровой операции.
HEX Dump ActiveX позволяет просматривать и редактировать данные в шестнадцатеричном HEX формате.
15 slide puzzle - 15 slide puzzle game.
BOOTSAVER - Позволяет скопировать загрузочный сектор жесткого диска в файл, восстановить загрузочный сектор из файла, восстановить загрузочную программу IPL1, не меняя таблицу разделов диска.
Генератор кроссвордов. Описание алгоритм компьютерного составления кроссвордов.
Симулятор 80196. Программный симулятор микроконтроллера Intel 80196KR. Имеет встроенный компилятор ассемблера, текстовый редактор, справочную систему. Может создавать HEX файлы.
Ассемблер. Оригинальный компилятор ассемблера х86.
DISKEDIT Программа позволяет просматривать и редактировать сектора дисков. Работает через прерывание INT13.

Программирование

WPF, XPS, NET. Как установить шрифт из памяти
Нейронные сети. Пример программы и исходный код С++.
Deflate. Подробное описание алгоритма декодирование формата Дефлет. Прмер декодирования с пояснениями.
Программирование драйверов для Windows. Общие вопросы программирования драйверов. Какими средствами пользоваться, где скачать DDK.
Программирование RS232 в Windows. СComBase класс для программирования COM порта.
Программирование потоков в Windows. Класс CBaseThread позволяет организовать несколько рабочих потоков.
Динамический Recordset CDynamicRecordSet - класс модернизирует CRecordSet для более удобной работы с БД из MFC приложений.
Как сохранить, восстановить, отредактировать MBR (Master Boot Record), boot sector, нулевой, загрузочный сектор диска при помощи утилиты debug.exe

evmsoft.net © 2014