С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/187: Рейтинг темы: голосов - 187, средняя оценка - 4.74
 Аватар для Venera
8 / 7 / 0
Регистрация: 31.10.2008
Сообщений: 92

Нейронные сети, обучение персептрона с учителем

05.01.2010, 03:58. Показов 36780. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем счастливого нового года!!! мне срочно нужно персептрон обучить с учителем, кто с таким сталкивался? может поможете, буду очень благодарна! Пока не понимаю даже с чего начать
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2010, 03:58
Ответы с готовыми решениями:

Обучить нейронную сеть типа персептрон
Всем привет. Может кто нибудь подсказать как делать именно это задание: Задать случайно значения точек в пространстве – по 10 в каждой из...

Стохастическое обучение персептрона
Всем привет! У меня тема курсовой работы "стохастическое обучение персептрона определения четности числа". Как сделать обучение я в...

Нейронные сети(персептрон)
Привет всем. Недавно начал изучать нейронные сети. Понравилось, очень интересно. Хочу реализовать для начала однослойный персептрон....

38
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2010, 10:10
Наверное самое простое - взять готовую библиотеку FANN(оно так в гугле набирается и первая же ссылка ведет на официальный сайт), и с её помощью уже делать нейросеть. Там есть и примеры, все очень просто.
Правда, я не знаю есть ли это перцептроном...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2010, 12:04
А я считаю, что для того, чтобы лучше(легче) понять что такое нейросеть, проще написать эти 20(ну может чуть больше) строчек кода с тем же FANN и увидеть как оно там работает. Тогда на практику уже и теория может лечь, а если просто читать теоретические выкладки, то может показаться, что это настолько сложно, что лучше за это и не браться. Говорю по собственному опыту.
0
 Аватар для Venera
8 / 7 / 0
Регистрация: 31.10.2008
Сообщений: 92
05.01.2010, 18:04  [ТС]
Цитата Сообщение от Otaka Посмотреть сообщение
взять готовую библиотеку FANN
библиатеку качаю, буду думать что с ней делать дальше
Цитата Сообщение от Log Посмотреть сообщение
Для начала нужно понять теорему об обучении
Да я уже столько всякой всячины перечитала, теорию УЖЕ понимаю вроде! мне примера нормального понятного и простого не хватает. Вы мне мажете подсказать, где эти сети реализовать можно , вот думаю попробовать с распознаванием образов элементарных, но наверно я запарюсь?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2010, 19:31
Лучший ответ Сообщение было отмечено как решение

Решение

Вот, смотри. Написал очень простой пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
struct fann *sfann;
//---------------------------------------------------------------------------
class CTrainData
{
public:
int input1,input2;
int output;
};
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
//Количество входных нейронов столько же, сколько и входных параметров
const unsigned int num_input = 2;
//Почему столько вот уровней? Без понятия, просто 3 это не 2 и не 5
const unsigned int num_layers = 3;
//--//--
const unsigned int num_neurons_hidden = 5;
//Выходных нейронов столько же, сколько и результатов.
const unsigned int num_output = 1;
//Инициализация
sfann = fann_create_standard(num_layers, num_input, num_neurons_hidden, num_output);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::btnTeachClick(TObject *Sender)
{
//Набиваем данные для тренировки. Таблица истинности основных булевых операций
CTrainData xor[4]={
{0,0,0},
{1,1,0},
{0,1,1},
{1,0,1}
};
CTrainData and[4]={
{0,0,0},
{0,1,0},
{0,1,0},
{1,1,1}
};
CTrainData or[4]={
{0,0,0},
{1,1,1},
{0,1,1},
{1,0,1}
};
 
CTrainData*selectedData;
switch(rgTrainingOperation->ItemIndex)
{
case 0:selectedData=and;break;
case 1:selectedData=or;break;
case 2:selectedData=xor;break;
}
 
 
float input[2];
float output[1];
//Много много раз запускаем нашу нейросеть в режиме тренировки. Задаем ей
//входные значения и то что должно получится на выходе. Сеть это запоминает.
for(int i=0;i<50000;i++)
  {
  int index=i%4;
  input[0]=selectedData[index].input1;
  input[1]=selectedData[index].input2;
  output[0]=selectedData[index].output;
  fann_train(sfann,input,output);
  }
ShowMessage("Обучение закончено");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float input[2];
float*output;
//Грузим во входные параметры необходимые параметры
if(Edit1->Text=="1")
  {
  input[0]=1;
  }else
  {
  input[0]=0;
  }
if(Edit2->Text=="1")
  {
  input[1]=1;
  }else
  {
  input[1]=0;
  }
//Запускаем нейросеть
output = fann_run(sfann, input);
//читаем результат
Edit3->Text=FloatToStr(output[0]);
}
//---------------------------------------------------------------------------
В принципе, для этой задачи хватило бы и 2 нейронов, ну да ладно.
Заметь, в задаче у тебя написано "обучение перцептрона", а это по моему однослойная нейронная сеть, и она не может обучится функции XOR которая дана в примере. Этот пример может обучится этой функции, так как там есть еще один промежуточный слой.
Состояние сети можно запоминать в файл, а потом его загружать, чтобы не обучать сеть заново.

Распознавание изображений(если простеньких), то не так уж и сложно. У меня есть распознавалка каптчи на MegaUpload. Дает где-то 40%(когда как) верности. Работает на этой же библиотеке. Такое слабое качество распознавания, потому что я при обучении отобрал всего лишь около сотни каптчей и на их основе и учил.
Миниатюры
Нейронные сети, обучение персептрона с учителем  
Вложения
Тип файла: rar NeuroNetwork.rar (229.2 Кб, 1353 просмотров)
10
 Аватар для Venera
8 / 7 / 0
Регистрация: 31.10.2008
Сообщений: 92
06.01.2010, 12:26  [ТС]
Otaka, спасибо тебе большое за помошь, только у меня проблемка, я не могу поставить fann библиотеку накачала с инета литературу, на английском языке, честно сказать не сильно в нем шарю. Если тебе не трудно помоги

Добавлено через 25 минут
Скачала с того сайта, что ты посоветовал, файл fann-2.1.0beta, так внутри папочки разные, файлы из папки BorlandC++Builder6.0 я скопировала в папку по адресу C:\Program Files\Borland\CBuilder6\Lib\Obj, Чувствую себя как-то глупо наверно все неправильно сделала???
0
12 / 12 / 4
Регистрация: 14.12.2009
Сообщений: 33
07.01.2010, 03:21
Это означает, что какие бы значения ни приписывались весам и порогу, сеть неспособна воспроизвести соотношение между входом и выходом, требуемое для представления функции ИСКЛЮЧАЮЩЕЕ ИЛИ.
это про Персептрон из Ф. Уоссермен Нейрокомпьютерная техника

а в примере используеться xor, я не разбирался, но уже сомневаюсь что это персептрон
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
07.01.2010, 13:11
Наверное, если сделать сеть однослойной, то она не сможет научиться XOR функции. Вот тебе и будет перцептрон. Сделать её однослойной можно сделать в параметрах инициализации.

Добавлено через 5 минут
Цитата Сообщение от Venera Посмотреть сообщение
Скачала с того сайта, что ты посоветовал, файл fann-2.1.0beta, так внутри папочки разные, файлы из папки BorlandC++Builder6.0 я скопировала в папку по адресу C:\Program Files\Borland\CBuilder6\Lib\Obj, Чувствую себя как-то глупо наверно все неправильно сделала???
Распакуй файлы из BorlandC++Builder6.0 в папку lib, а потом скопируй файлы из FANN/src/include в CBuilder/include.
Потом когда создашь проект, нажми в меню "Project/add to project" и из папки lib добавь файлик libfann.lib. После этого все должно работать.
0
 Аватар для Venera
8 / 7 / 0
Регистрация: 31.10.2008
Сообщений: 92
07.01.2010, 17:50  [ТС]
Otaka, Сделала все как ты сказал, с последним пунктом возникла проблемка, я файла libfann.lib не нашла, “Поиск” тоже результатов не дал, при компиляции вываливается ошибка
[Linker Fatal Error] Fatal: Unable to open file ’LIBFANN.LIB’ но я думаю это нормально
Отправь мне файлик libfann.lib, пожалуйста.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
07.01.2010, 17:57
Бери всю библиотечку.
Вложения
Тип файла: rar fann_fix.rar (226.5 Кб, 745 просмотров)
1
101 / 101 / 19
Регистрация: 29.12.2009
Сообщений: 204
07.01.2010, 17:58
Venera, в папке BorlandC++Builder6.0 есть файл libfann.bpr - открой его в билдере и выполнь Make - получится libfann.lib
это всё лучше сделать до переноса всего этого в папку с билдером (т.е распаковать весь архив fann-2.0.0.zip и собрать библиотеку)
0
 Аватар для Venera
8 / 7 / 0
Регистрация: 31.10.2008
Сообщений: 92
07.01.2010, 18:19  [ТС]
Otaka, заменила свои файлы твоими и у меня все заработало!!!!!!!!!!!!!
все , буду программировать
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.02.2010, 17:39
Цитата Сообщение от Otaka Посмотреть сообщение
У меня есть распознавалка каптчи на MegaUpload
А по какому принципу строилась сеть?

Количество входов совпадает с количеством точек на изображении. На каждый вход подаётся число от 0 до 255, соответствующее яркости соответствующей точки (предполагаю, что изображение чёрно-белое), а на выходе формируется последовательность байтов, кодирующая строку. Типа того или как-то по другому?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
07.02.2010, 17:48
Почти так. Сначала повышается контрастность, чтобы было только белое и черное, потом изображение режется на буквы, потом уменьшается, потом каждая точка отправляется на свой нейрон, а потом с выхода берется значение буквы. Кстати, выходов столько же, сколько и букв алфавита, поэтому я смотрю на каком выходе максимальное значение, и беру его индекс.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.02.2010, 18:27
Цитата Сообщение от Otaka Посмотреть сообщение
потом изображение режется на буквы
Если оно режется - то это гораздо проще. Просто сейчас куча картинок, где буквы переплетаются

Цитата Сообщение от Otaka Посмотреть сообщение
потом уменьшается, потом каждая точка отправляется на свой нейрон, а потом с выхода берется значение буквы. Кстати, выходов столько же, сколько и букв алфавита, поэтому я смотрю на каком выходе максимальное значение, и беру его индекс.
Если выходов столько же, сколько букв, то что подаётся в качестве эталонного ВЫХодного сигнала при обучении?

Добавлено через 5 минут
И можешь пример ихней картинки, чтоб хоть видно было, что это. А то пример ссылки с ходу в гугле так и не нарыл
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
07.02.2010, 18:35
Я знаю, в той каптче ведь тоже переплетается, вот поэтому качество распознавания у меня около 30-40 процентов, но мне достаточно. А что было при изначальном обучении? Я скачал около сотни каптчей, вручную их распознал в файлик, а потом в цикле учил нейросеть.
А вот и пример каптчей(их тут 5 штук, а не одна)
Если честно, это каптчи из папки "BadCaptcha"(читай то, что не распозналось).
Изображения
     
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.02.2010, 18:38
Ещё раз повторю вопрос
Если выходов столько же, сколько букв, то что подаётся в качестве эталонного ВЫХодного сигнала при обучении?

А нарезаешь на отдельные буквы - это просто делишь картинку на 4 равных куска?

Добавлено через 1 минуту
Я к чему всё это. Я распознавалки писать не собираюсь. Просто есть конкретный более-менее живой пример потребности, хочу понять, что для этого должно подаваться на вход, а что приниматься на выход
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
07.02.2010, 18:42
На четыре если быть более точным(4 буквы в каптче).
Выходной сигнал который я устанавливал сетке для запоминания:
Пример
A
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Надеюсь ты это хотел узнать?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.02.2010, 18:42
Цитата Сообщение от Evg Посмотреть сообщение
Ещё раз повторю вопрос
Если выходов столько же, сколько букв, то что подаётся в качестве эталонного ВЫХодного сигнала при обучении?
Дочитал до описания принципа "победитель получает всё". Собственно, этот вопрос снимаю
0
 Аватар для VorteX
172 / 96 / 12
Регистрация: 29.05.2009
Сообщений: 341
07.02.2010, 19:39
Почитал про нейронные сети, очень интерестно.
Можете ктонить посоветовать какуюнить обучалку, статьи по той теме связанные с С++?на русском желательно, Хочеться поразбираться в этой теме, не наю с чего начать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2010, 19:39
Помогаю со студенческими работами здесь

Обучение нейронной сети - алгоритм обратного распространения ошибки(learning_tree)
struct SAcson { int l,c; // строка, столбец float x; // заряд }; struct SSinapc { int l,c; // строка, столбец }; ...

Нейронная сеть, обучение с нуля
Нужен совет экспертов с чего начать. Бегло читала про библиотеки ИИ и остановилась на двух tensorflow и caffe2. Пишу на С++, поэтому...

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

Как же обучать автокодировщик? Непонятная ситуация с обучением нейронной сети
Доброго времени суток! Сразу к делу. Пытаюсь использовать метод обратного распространения ошибки при обучении автокодировщика. Обучаю на...

Использование модуля для обучения нейронной сети распознаванию образов
Составить программу, которая использует модуль для обучения нейронной сети распознаванию образов С++


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru