Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нейронные сети, алгоритм обратного распространения 
:(
    Опции темы
Friackazoid
Дата 20.5.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



Пишу программу распознования букв алфивита. Общая концепция такая: есть 32 bmp файла (100х100) названных а.bmp б.bmp и т.д. с образцами букв. Нейронная сеть считывает эти файлы и обучается. Пользователь создает файл test.bmp (100x100) со своей буквой и прога должна его распознать.

Реализую я все это дело через классический персептон. То есть внешний сенсорный слой это вектор картинки (1-черный пиксель 0-белый), скрытый слой из 100 нейронов, и выходной слой из 5 нейронов. Буквы кодируются на выходном слое так а=00001 б=00010 и т.д.

Проблема в том что очень много литературы и везде все написано по разному. Вот и не очень понимаю в алгоритме обучения сети какую форммулу использовать для рассчета дельта.

Вот то что есть
Код

#define FIRST_LAYER 10000
#define SECOND_LAYER 100
#define THERD_LAYER 5

class NeuronNet
{
public:
    double S1[FIRST_LAYER]; //массив состояний (выходов) нейронов 1-го слоя
    double S2[SECOND_LAYER]; //массив состояний (выходов) нейронов 2-го слоя,
    double S3[THERD_LAYER]; //массив состояний (выходов) нейронов 3-го слоя,

    double W1 [FIRST_LAYER][SECOND_LAYER]; //массив весов синапсических связей от 1ого слоя ко 2ому
    double W2 [SECOND_LAYER][THERD_LAYER]; //массив весов синапсических связей от 2ого слоя к 3eму

    double G3 [THERD_LAYER]; //массив тебуемых значений при обучении

    void readfile (int);
    void LernNeuronNet (void);

    NeuronNet(void);
    ~NeuronNet(void);
};

void NeuronNet::LernNeuronNet (void)
{
    double sum=0;
    for (int i =0; i<32; i++) //сеть будет распозновать 32 символа русского алфавита
    {
        readfile(i);
        for (int j=0; j<200; j++) //упростим алгоритм и сделаем количество итераций для обучения постоянным
        {
            for (int k=0; k<SECOND_LAYER; k++)
            {
                S2[k]=0;
                for (int l=0; l<FIRST_LAYER; l++)
                    sum += S1[l]*W1[l][k];

                S2[k] = 1/1+exp(sum); 
            }

            for (int k=0; k<THERD_LAYER; k++)
            {
                S3[k] =0;
                for (int l=0; l<SECOND_LAYER; l++)
                    sum += S2[l]*W2[l][k];
                                    //корректо но ли??
                                     if (sum > 0.5) S3[k]=1;
                else S3[k]=0;
            }

            for (int k=0; k<THERD_LAYER; k++)
                for (int l=0; l<SECOND_LAYER; l++)
                    W2[l][k] += S2[l](1-S2[l])(G3-S2[l]);

            for (int k=0; k<SECOND_LAYER; k++)
                for (int l=0; l<FIRST_LAYER; l++)
                {
                    Помогите рассчитать ошибку //W1[l][k] += 

                }
        }
    }
}


Подскажите пожалуста формулу для рассчета дельты для массива весов от входного слоя к скрытому. а также с удовольствием выслушаю советы и замечания.
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Greeen
Дата 21.5.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: нет
Всего: 18





--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Friackazoid
Дата 21.5.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



Кто-нибудь из модераторов, перенесите тему тогда.
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Promitheus
Дата 21.5.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.3.2007

Репутация: нет
Всего: 1



W(i+1)=W(i)-Коб*Delta(i)*Х;
Коб - коэффициент обучения 0<Коб<1;
delta=abs( эталонный выход - реальный выход).//соотв компонента вектора

Обучение делается до тех пор, пока delata<Eps. Eps-ошибка обучения.

Вообще на мой взгляд здесь целесообразнее использовать структуры, а не классы, иначе упрётся алгоритм в низкую производительность.
PM MAIL ICQ   Вверх
Friackazoid
Дата 21.5.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



Promitheus, 

Это-то понятно. Теории везде полно. Непонятно как это написать в коде. Что такое Delta(i) и что такое Х. smile 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Promitheus
Дата 21.5.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.3.2007

Репутация: нет
Всего: 1



Что-то мне сдаётся ты не совсем понимаешь суть вопроса. X - входной компонент кетора delta(i) - значение дельты на i шаге итерации. delta=abs( эталонный выход - реальный выход).
Я написал как сам сделал.  

Это сообщение отредактировал(а) Promitheus - 22.5.2007, 08:11
PM MAIL ICQ   Вверх
Promitheus
Дата 22.5.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.3.2007

Репутация: нет
Всего: 1



По-моему, у тебя не правильно структура организована нейро сетки. Там каждый элемент текущего слоя должен быть связан, с каждым элементом последующего слоя, за исключением когда веса редуцированы (W=0).

Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  NN.jpg 107,18 Kb
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.