Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 17:58   #1
NovGosh
Новичок
Джуниор
 
Регистрация: 15.05.2012
Сообщений: 1
Вопрос Нейросеть. Обратное распространение ошибки

Честно скажу, долго думал в какую ветку писать вопрос, но решил сюда.
Суть проста: написал нейросеть, перцептрон. Обучаю методом обратного распространения ошибки. Только начал заниматься этим делом. Начал с малого - 2 входа, 2 нейрона внутри, один выход. Научил его операции xor. Работало). После чего захотелось распозновать картинки размером 32 * 32. Чтобы сразу не переходить к сложным задчам сделал всего две картинки - полностью белую и полностью чёрную. Теперь структура такая : 32 * 32 - вход, 32 * 32 - внутренний и 2 - выход. И вот на такой простой задачё всё и остановилось! Нейросеть ну никак не хочет запоминать их обе одновременно. Я совсем не знаю в чём дело.
Вот расщёт выхода нейрона :
Код:
public double calcSignal ()
{
    return (double) 1 / (1 + Math.Exp(-2 * Const.Alpha * value));
}
Вот расчёт ошибки выходного слоя:
Код:
public void calcGrad (double correct)
{
    grad = signal * (1 - signal) * (correct - signal);
}
Вот всех внутренних слоёв:
Код:
public void calcGrad ()
{
    grad = 0;
    for (int i = 0; i < next.Length; i++)
         grad += weight[i] * next[i].grad;
    grad *= signal * (1 - signal);
}
Вот как я меняю веса рёбер конкретного нейрона:
Код:
public void changeEdgesWeight (double speed)
{
    for (int i = 0; i < next.Length; i++) {
        delta[i] = delta[i] * Const.M + (1 - Const.M) * speed * next[i].grad * signal;
        weight[i] += delta[i];
    }    
}
Думал, что дело в константах. Пытался подбирать, но ничего не изменилось. На данный момент константы такие:
Alpha = 0.1 - кривизна сигмоиды
MaxWeight = 0.01 - максимальный вес ребра в нейросети на момент, когда я всё заполняю рандомом
M = 0.7 - это коэффициент инерции.

Прошу подсказать, в чём я неправ, ибо самому разораться не получается.
P.S. на всякий случай прикрепляю арзхив с проектом. Написан на c# в Visual Studio, но не думаю что комуто захочется разбераться в моём коде.
Вложения
Тип файла: rar NeuralNetwork v.2.0.rar (37.5 Кб, 52 просмотров)
Пишу программы за деньги
e-mail: novgosh@gmail.com
skype: novgosh
NovGosh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обратное геокодирование strannick Microsoft Office Excel 9 11.01.2012 09:35
Распространение вашего приложения EniSh Общие вопросы .NET 1 10.02.2010 10:47
Распространение androidvsu Общие вопросы по Java, Java SE, Kotlin 0 26.01.2010 21:08
Обратное о модулю Cakeinpanic Общие вопросы C/C++ 1 04.06.2009 08:32
Распространение прог с dbExpress pushkin42 БД в Delphi 0 24.09.2008 08:14