Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нейросети.Распознавание цифр, Распознавание цифр  
:(
    Опции темы
DrWeb
Дата 7.1.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Задание ЛР: написать прогу,которая будет распознавать цифры от 0 до 9 ,юзая нейросеть
Тема:РАСПОЗНАВАНИЕ ОБРАЗОВ С ПОМОЩЬЮ ОДНОСЛОЙНЫХ НЕЙРОННЫХ СЕТЕЙ

запара на стадии распознавания.
мой алгоритм:
у меня есть файлы для обучения-100 штук(там цифры от 0 до 9).

сначала инициализирую веса
Код

void Perseptron::InitWeights()
{
        srand(time(0));
    for (int i=0;i<64;i++)
        for (int j=0;j<64;j++)
                 this->W[i][j] = 0.1;
}


затем начинаю обучение:
Код

void Perseptron::Teaching()
{
        for (int i=0;i<100;i++) {
                Form1->Image1->Picture->LoadFromFile(Rectangular[i]);
                this->CreateX();
                this->Adder(1);
                this->ChangeWeights();
        }   
}

void Perseptron::CreateX()
{        
    for (int i=0;i<64;i++)
        for (int j=0;j<64;j++)
            this->X[i][j] = FindBlackPoint(i,j);
}

int Perseptron::FindBlackPoint(int i,int j)
{
    int k = 0;
        if (Form1->Image1->Canvas->Pixels[i][j] == clBlack) k = 1;
    return k;
}

void Perseptron::ChangeWeights()
{
    for (int i=0;i<64;i++)
        for (int j=0;j<64;j++)
            this->W[i][j] += this->alpha*this->delta*this->X[i][j];
}

void Perseptron::Adder(int k)
{
    long double s = 0;
    for (int i=0;i<64;i++)
        for (int j=0;j<64;j++)
            s += this->W[i][j] * this->X[i][j];
    this->Y = 1 / (1 - exp(-s));
    this->delta = k - this->Y;

        Form1->Memo1->Lines->Add(this->Y);
}


в итоге получаю Y каждой картинки:

1,0000002504517
1,00000226033452
1,00000000227793
1,00000000000021
1
1,37463052051532
1,81596622091609
1,68511775040501
1,00000000000001
1,00000000113119
1,00203355760039
1,00006773332398
1,00000000003416
1,00002753720763
1,00002039991956
1,00000001378066
1,05239569649126
1,00000000001257
1,00203355760039
1,37463052051532
1,00000000000103
1,00000033807446
1,00000007543459
1,00000000009285
1
1,81596622091609
2,5414940825368
1,98643386363446
1,00000011253519
1,0000010156325
1,00000000000624
1,00000137096097
1,00000018553917
1,00000000030828
1,00000000000001
1,08942548983385
1,0311376592578
1,07204750205712
1,00000007543459
1,00000055739068
1,00000000000139
1,00000045635285
1,00000033807446
1,00000000009285
1
1,00203355760039
1,00150570292577
1,49896065897319
1,00000000458718
1,0000002504517
1,00000000000011
1,00000045635285
1,0000002050525
1,0000000000031
1
1,08023275177894
1,08023275177894
1,12461038228416
1,00000008336811
1,00000276078019
1,00000000000001
1,00000037363008
1,00000004575339
1,00000000000076
1
5,51665556612699
1,09976877209618
1,98643386363446
1,00000000125015
1,00000124049662
1,00000000206115
1,00000027679194
1,00000411860567
1,0000000025175
1,00000000001535
1,015223867495
1,04249436807789
1,04717437014187
1,00000124049662
1,00000007543459
1
1,00000007543459
1,00000000138163
1,00000000000005
1
1,04249436807789
1,02066011159517
1,02288267495709
1,00000000013852
1,00000006176062
1,00000000000001
1,00000001683173
1,00000001683173
1,00000000000084
1
1,015223867495
1,02809128080726
1,01375519721737
1,00000000125015
1,00000027679194


у распознавательной картинки Y получается 1,00000000000046
как терь мне определить какое это число?че нуно дописать?де я напорол?

Писал по этому алгоритму:

При нечетной цифре – лампа горит.
При четной – не горит.
Персептрон обучается по стратегии с учителем
Пусть X – образ распознаваемой цифры. 
Каждая компонента x=(x1,x2,…,xn) умножается на компоненту вектора весов A
Если сумма произведений превышает порог θ, то выход нейрона Y равен 1, иначе 0
G=XA
Для обучения сети образ X подается на вход и вычисляет выход Y используя случайные значения весов aij. Если Y правильный, то ничего не меняем, иначе веса корректируются.
Если в результате обучения выход неправилен, то веса, присоединенные к входам, усили-вающим ошибочный результат, модифицируется, чтобы уменьшить ошибку.




Это сообщение отредактировал(а) DrWeb - 7.1.2010, 01:56
PM MAIL WWW   Вверх
VictorTsaregorodtsev
Дата 7.1.2010, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Рекомендую почитать учебники по нейросеткам. Т.к. пока что запрограммирована "не мышонок, не лягушка, а неведома зверюшка" (С). Вернее, запрограммирован, похоже, единственный нейрон с сигмоидной нелинейностью - как от него планируется получать 10 разных кодов, соответствующих 10 разным цифрам, мне неведомо ;)

Рекомендую почитать еще и учебники по С++ - ибо перманентное обращение к this есть бредятина.

Третья рекомендация - перенести тему в Алгоритмы или в ИИ, к плюсам она отношения не имеет
PM MAIL WWW   Вверх
djamshud
Дата 7.1.2010, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Раз уж тема пока еще висит в "С++", отвечу.

>Рекомендую почитать еще и учебники по С++ - ибо перманентное обращение к this есть бредятина.

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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
andrew_121
Дата 7.1.2010, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(VictorTsaregorodtsev @  7.1.2010,  00:58 Найти цитируемый пост)
ибо перманентное обращение к this есть бредятина.

нормальная практика.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
DrWeb
Дата 7.1.2010, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(djamshud @ 7.1.2010,  01:07)
Это нормально, имхо. Я всегда так делаю, ибо сразу понятно, к чему идет обращение. Особенно это спасает, когда через месяцок открываешь исходник и не пытаешься понять, икс - это член класса, локальная или глобальная переменная, переданный параметр или что-то еще.

Во-во - и не надо все время заглядывать в класс-какие там переменные или методы (особенно если еще и класс в отдельном файле)

На счет лягушенка-так я поэтому и обратился шоб помогли с алгоритмом-мож кто сталкивался уже
PM MAIL WWW   Вверх
zim22
Дата 7.1.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(djamshud @  7.1.2010,  00:07 Найти цитируемый пост)
Это нормально, имхо. Я всегда так делаю, ибо сразу понятно, к чему идет обращение

попробуй к полям класса добавлять префикс. и не нужно будет this использовать.

Код

class S {
 public:
  S(int data) : data_(data) { }
 private:
  int data_; // волшебный префикс
};


Это сообщение отредактировал(а) zim22 - 7.1.2010, 13:57


--------------------
PM MAIL   Вверх
mes
Дата 7.1.2010, 14:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



 smile 
Цитата(zim22 @  7.1.2010,  12:57 Найти цитируемый пост)
int data_; // волшебный префикс

Пре́фикс (фр. prefix от лат. praefixus — «прикреплённый впереди»):
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%...%B8%D0%BA%D1%81

а у Вас прикреплен сзади, тогда он больше постфикс..
или аффикс, если не важно где прикреплен.
 smile 


Это сообщение отредактировал(а) mes - 7.1.2010, 14:23


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 7.1.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



zim22, во-первых, то называется постфикс, во-вторых, в печь такой подход, я его в других случаях использую.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
zim22
Дата 7.1.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



 smile 
Цитата(mes @  7.1.2010,  13:21 Найти цитируемый пост)
а у Вас прикреплен сзади, тогда он больше постфикс..

я даже не знаю что ответить  smile. 
***
всё-равно я считаю, что данные-члены нужно как-то выделять. будь-то подчёркивание, или аффикс какой-нибудь
типа m_variable;

Это сообщение отредактировал(а) zim22 - 7.1.2010, 14:49


--------------------
PM MAIL   Вверх
djamshud
Дата 7.1.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



zim22, this - самое кошерное и ни с чем не спутываемое выделение).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
zim22
Дата 7.1.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



djamshud, просто у меня проблема с this была.
ввиду того, что имена переменных были идентичны в параметрах функции и у членов класса - после того, как от this отказались (тупым поиском this-> по тексту и его удалением) много кода начало работать не так, как нужно smile
***
по-теме: DrWeb, тебе кинуть курсовой на JAVA? там как-раз распознавание символов на нейросети. только там многослойный перспептрон.

Это сообщение отредактировал(а) zim22 - 7.1.2010, 15:01


--------------------
PM MAIL   Вверх
djamshud
Дата 7.1.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



zim22, так это проблена не с this, а без this, что еще раз кивает в сторону его популяризации.

Это сообщение отредактировал(а) djamshud - 7.1.2010, 15:02


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 7.1.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



Цитата(zim22 @  7.1.2010,  13:59 Найти цитируемый пост)
ввиду того, что имена переменных были идентичны в параметрах функции и у членов класса - после того, как от this отказались (тупым поиском this-> по тексту и его удалением) 

интересно, а чем это this помешал ? уж не для того ли, чтоб избавиться от одного косвенного вызова ? (боюсь представить, если предположение повториться)

P.S. я использую аффиксы, но не потому что против this, а так как this-> длинее, а мне лень,
 да и в выражениях его легко забыть, а сразу и не видно (аффикс больже бросается в глаза)
 плюс аффиксы несут иногда семантическую нагрузку.

P.S.S this использую иногда для вызова метода, если без него запись кажется не очевидной.

Добавлено через 5 минут и 1 секунду
P.S.S. хотя не пойму почему нельзя было сделать обращение например просто через точку, с (*this ) по умолчанию
 т.е примерно так :
Код

class A {
   int i;
//...
   A (int i) { .i = .f (i); }
   int f (int);
};





--------------------
PM MAIL WWW   Вверх
zim22
Дата 7.1.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(mes @  7.1.2010,  14:07 Найти цитируемый пост)
интересно, а чем это this помешал ?

он занимает 6 символов. this->
в конторе решили частично перейти на C++ google style. а этом 80 символов в строке. не более.
так что это борьба за символы была smile
***
ну и лично мне this'ы читать не по-приколу. что не строка, то this. глаза только утомляет.

Это сообщение отредактировал(а) zim22 - 7.1.2010, 15:14


--------------------
PM MAIL   Вверх
mes
Дата 7.1.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



Цитата(zim22 @  7.1.2010,  14:12 Найти цитируемый пост)
ну и лично мне this'ы читать не по-приколу. что не строка, то this. глаза только утомляет.


с этим согласен, мне тоже режет.. но в слепую убирать this у неприспособленного без него работать кода, тоже не дело.
 smile 



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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