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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2009, 18:48   #1
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию Нейронная сеть.С++

Здравствуйте,на паре мне рассказывали принцип работы нейронной сети(однослойной или двухслойной,называют по-разному).Наваял программку,которая распознает на что больше похож входной символ на букву N или букву M.Буквы описываются множествами,состоящих и цифр в шестнадцатеричной системе счисления.Приведу пример для буквы M:
1000|0001
1100|0011
1010|0101
1001|1001
1000|0001
1000|0001
1000|0001
1000|0001
Первая строчка описывается цифрой 0x81,т.е. до | стоит цифра 8,после 1 ну и т.д.на выходе получаем множество
Код:
unsigned char M[8]={0x81,0xc3,0xa5,0x99,0x81,0x81,0x81,0x81};
Так у меня забита и буква N.
X-буква которую мы проверяем и выясняем на что она больше похожа.Вот код самой программы:
Код:
#include "stdafx.h"
#include "iostream"
using namespace std;
int out[2]={0};
unsigned char M[8]={0x81,0xc3,0xa5,0x99,0x81,0x81,0x81,0x81};
unsigned char N[8]={0x81,0xc1,0xa1,0x91,0x89,0x85,0x83,0x81};
unsigned char X[8]={0xff,0xc3,0xa5,0x99,0x81,0x81,0x81,0x81};
int _tmain(int argc, _TCHAR* argv[])
{	
	int matr[2][64]={0};
	unsigned char byte=0,maska=0x80;
	for(int i=0,k=0;i<8;i++)
		{
			maska=0x80;
			for(int j=0;j<8;j++,k++)
			{
				byte=M[i];
				byte=byte&maska;
					if(byte>0)
						matr[0][k]+=1;
				maska=maska>>1;//сдвиг на 1 разряд
			}
		}
	for(int i=0,k=0;i<8;i++)
		{
			maska=0x80;
			for(int j=0;j<8;j++,k++)
			{
				byte=N[i];
				byte=byte&maska;
					if(byte>0)
						matr[1][k]+=1;
				maska=maska>>1;//сдвиг на 1 разряд
			}
		}
	for(int i=0,k=0;i<8;i++)
		{
			maska=0x80;
			for(int j=0;j<8;j++,k++)
				{
					byte=X[i];
					byte=byte&maska;
					out[0]+=matr[0][k]*byte;
					out[1]+=matr[1][k]*byte;
					maska=maska>>1;
				}
		}
        if(out[0]>out[1])
		cout<<"M";
	else 
		cout<<"N";
	getchar();
	return 0;
}
А теперь вопрос по программе.Есть такое понятие как "наказание",говорят,что оно делает распознавание более точным.Так ли это? Почему и как это сделать?Объясните неучу,а то непоНяТно..)
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 20.11.2009, 14:29   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Кстати,тема все ещё открыта..))
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 20.11.2009, 14:32   #3
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,033
По умолчанию

Что-то это не похоже на нейронную сеть О_О
Levsha100 вне форума Ответить с цитированием
Старый 20.11.2009, 15:05   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Как Вы представляете нейронную сеть?
Для меня нейронная сеть это совокупность нейроннов.
Как Вы представляете нейрон?
Для меня нейрон это сумматор, половина входов которого положительная, а половина отрицательная. Если сумма положительных входов больше суммы отрицательных, то на выходе 1, если меньше то нуль. Если обе суммы равны, то значение выходного сигнала не изменяется.
Где у Вас нейросеть?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 20.11.2009, 16:31   #5
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

В данном примере,насколько я понял,есть маска(фактически получается нейрон.Нам пришла строка,мы проделываем логическое умножение,если в этом разряде у нас 1,то мы прибавляем 1 к обучающей матрице..
Код:
byte=byte&maska;
Двигаем разряд у маски и получаем следующий нейрон,проделаем то же самое.получили матрицу для двух букв,и через неё прогоняем наш символ.На выходе получаем 2 числа,какое больше,тот символ и ближе.Это ответ на ваш вопрос?..Как объяснили алгоритм,так я и написал,хотелось немного сократить код,но разве это плохо?..)..Ну а ошибаться можно,я ведь учусь..))
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нейронная операционная система juan666777 Свободное общение 34 04.08.2009 14:34
сколько стоит нейронная сеть? DeFace Фриланс 6 25.04.2009 13:48
Нейронная сеть+генетические алгоритмы. gusluk Софт 0 22.04.2009 07:58
сеть в linux Ламер_001 Помощь студентам 2 20.10.2008 18:58