Вверх ↑
Этот топик читают: Гость
Ответов: 8
Рейтинг: 0
#16: 2020-07-08 15:05:31 ЛС | профиль | цитата
flint2, после того как программа сможет распознавать фигуры, в конечном счете я хочу его научить распознавать текст, а там я думаю фон будет намного проще. По идеи текст это тоже набор фигур, если начинать сразу минуя фигуры, учить распознавать текст, я думаю, что будет намного сложней. Насколько вообще сложно построить алгоритм,что нужно знать?
карма: 0
0
Ответов: 2059
Рейтинг: 131
#17: 2020-07-08 15:24:26 ЛС | профиль | цитата
Wabi-Sabi писал(а):
если начинать сразу минуя фигуры, учить распознавать текст, я думаю, что будет намного сложней.

Вот яркий пример не правильной постановки задачи!!!
Надо начинать с главного!
Распознавать текст на монотонном фоне на порядки легче, да и пролог здесь совсем ничего не сможет сделать!
Написал-бы "учить распознавать текст" и всех этих постов не было-бы!!!
Wabi-Sabi писал(а):
Насколько вообще сложно построить алгоритм,что нужно знать?

Не всякая серьёзная компания за это возьмётся!
Есть такая программа FineReader - она делает всё что ты хочешь.
Распознавание там сделано на сетке, а лингвистическая часть на прологе (исправление ошибок-спорных результатов и подбор наиболее подходящих слов по контексту).
Описание принципов работы можно найти в интернете.

Редактировалось 1 раз(а), последний 2020-07-08 15:38:20
карма: 6

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#18: 2020-07-08 15:43:01 ЛС | профиль | цитата
Анекдот
Купили как-то суровым сибирским лесорубам японскую бензопилу.

Собрались в кружок лесорубы, решили ее испытать. Завели, подсунули ей деревце.
— Вжик! — сказала японская пила.
— У, бля! — сказали лесорубы.

Подсунули ей деревце потолще.
— Вж-ж-жик! — сказала пила.
— У, бля! — сказали лесорубы.

Подсунули ей толстенный кедр.
— Вж-ж-ж-ж-ж-ж-ж-жик! — сказала пила.
— Ууух, бля! — сказали лесорубы.

Подсунули ей железный лом.
— КРЯК! — сказала пила.
— Ага, бля! — укоризненно сказали суровые сибирские лесорубы. И ушли рубить лес топорами.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 16884
Рейтинг: 1239
#19: 2020-07-08 16:15:30 ЛС | профиль | цитата
Wabi-Sabi писал(а):
после того как программа сможет распознавать фигуры, в конечном счете я хочу его научить распознавать текст
Wabi-Sabi, какой текст? Японские иероглифы ?
В «Дайканва дзитэн» (японском словаре иероглифов) около 50000 знаков.
В Юникоде - 7000 знаков.
Полностью описать (ударение на "сать") свою хотелку можешь ?
Это называется "Постановка задачи".
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8
Рейтинг: 0
#20: 2020-07-08 23:35:54 ЛС | профиль | цитата
flint2, насколько возможно решить задачу самоорганизующиеся карты Кохонена в hiasm?
карма: 0
0
Ответов: 2059
Рейтинг: 131
#21: 2020-07-09 10:48:32 ЛС | профиль | цитата
Wabi-Sabi, вот архив https://yadi.sk/d/LQSjbbN7KqvDdA нескольких видов сетей с исходниками компонентов для Дельфи и помощь к ним.
Давно хотел переделать под HiAsm...
Там есть сеть Хопфилда, то лучше делать FANN.
Проверял её в боевых условиях для ̶написания генерации рассказов, сюжетов и сценариев для игр.

Редактировалось 3 раз(а), последний 2020-07-09 10:50:03
карма: 6

0
Ответов: 8
Рейтинг: 0
#22: 2020-07-09 16:35:40 ЛС | профиль | цитата
flint2, спасибо за архив. Что нужно знать, чтобы перевести компоненты с delphi в hiasm, это сложный процесс?
карма: 0
0
Ответов: 2059
Рейтинг: 131
#23: 2020-07-09 18:19:58 ЛС | профиль | цитата
"Забудьте всё, чему вас учили в институте, и слушайте сюды." ©
Ничего отдалённо общего нет с компонентами delphi и HiAsm, ну разве что слово "компонент".
...
— Паровоз видел.
— О! А это что такое?
— Ну как тебе сказать... Ты вот знаешь апельсин?
— Апельсин? Ну знаю.
— Так вот, Петька: паровоз на апельсин совсем не похож.
Из постановки вопроса, я сделал вывод, что ты с delphi знаком.
(Мы культурные люди, и неприемлем всё чему учат манагеров, селов и горе-бизнесменов, и знаем, что каждый вопрос должен содержать девяносто процентов ответа.)
Начнём с того предположения, что ты можешь написать, худо-бедно, какой ныть IC.
Для тренировки всё это можно сделать в IC не делая компонентов.
Далее смотрим, как сделаны готовые компоненты. Подбираем похожий по функциональности (по точкам и другим прибамбасам, а не то, что он делает)- по классификации.
Смотрим как всё устроено - учебников нет и это закаляет. На самом деле ничего замысловатого нет, если уловить мысль автора.
Всю эту лабуду: uses SysUtils,Classes;
Заменяем на: uses Kol, Share, - возможно добавляем по ходу пьесы: Win, Windows, Messages ..., в зависимости чего надо.
Запускаем и сразу ошибки...
Надо заменить дельфийские: создание потока, списка, дерева и по мелочи - KOL`овскими(KOL.pas) - я не помню точно чего там, именно в этих компонентах. По моему вообще чего-то по мелочам.
Их на самом деле не так много различий - на память, у меня умещается на пальцах двух рук.
Во всяком случае, это на несколько порядков легче чем с C++ в HiAsm.
Если чего - пиши!
Мы понимаем, что каждый вопрос должен содержать девяносто процентов ответа.

Редактировалось 6 раз(а), последний 2020-07-09 19:49:43
карма: 6

0
Ответов: 5227
Рейтинг: 586
#24: 2020-07-09 20:51:00 ЛС | профиль | цитата
Wabi-Sabi писал(а):
Что нужно знать, чтобы перевести компоненты с delphi в hiasm

Цель, всё остальное приложится. (С годами )
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 8
Рейтинг: 0
#25: 2020-07-10 12:15:10 ЛС | профиль | цитата
Походил, подумал, так не понял почему в hiasme нельзя сделать нейросеть. Решил почитать в интернете, что пишут. Нашел небольшое руководство на странице:https://neurohive.io/ru/osnovy-data-science/osnovy-nejronnyh-setej-algoritmy-obuchenie-funkcii-aktivacii-i-poteri/. Решил сделать как написано.


Add(MainForm,2953706,77,56)
{
Height=217
Caption="нейросеть"
BorderStyle=1
Position=1
}
Add(Memo,5818142,1525,665)
{
Top=35
Width=384
Height=52
}
Add(Button,232110,98,203)
{
Left=180
Top=87
Width=204
Caption="Учить"
link(onClick,14798066:doEvent1,[])
}
Add(Random,7893346,546,126)
{
link(onRandom,15268055:doOperation,[(608,132)(608,125)])
}
Add(For,4320093,448,133)
{
End=2
link(onEvent,7893346:doRandom,[(531,139)(531,132)])
link(onStop,823416:In,[(495,146)(495,174)])
}
Add(Math,15268055,637,119)
{
OpType=3
Op2=100
link(onResult,13232827:doAdd,[(719,125)(719,132)])
link(Op1,7893346:Random,[(643,114)(597,114)(597,170)(552,170)])
}
Add(MathParse,9250038,972,280)
{
DataCount=3
MathStr="1/(1+e^((%2*%1)+(%3*%1)))"
link(onResult,9135928:doOperation,[(1065,286)(1065,251)])
link(X1,1287673:Var,[(978,206)(979,206)])
link(X2,13587347:Var2,[(985,180)(1042,180)])
link(X3,7690501:Var2,[(992,253)(1088,253)])
}
Add(Math,9135928,1126,245)
{
Point(doClear)
link(Op2,443059:Var3,[(1139,233)(1137,233)(1137,292)])
}
Add(Hub,14798066,168,203)
{
OutCount=3
link(onEvent1,10249591:In,[(200,209)(200,153)])
link(onEvent2,12551519:In,[(214,216)(214,167)])
link(onEvent3,15036713:doEvent1,[])
}
Add(LineBreak,11345495,1084,252)
{
link(Out,9135928:doClear,[])
Primary=[10249591,-867,-105]
}
Add(Math,16110325,1238,340)
{
OpType=1
link(onResult,9246201:doValue,[(1327,346)(1327,339)])
link(Op1,16442475:Text,[])
link(Op2,15851051:Var,[])
}
Add(Edit,16442475,1238,214)
{
Left=120
Top=15
Width=164
Text="1"
}
Add(StrList,13232827,769,126)
{
}
Add(LineBreak,4774714,699,133)
{
link(Out,13232827:doClear,[])
Primary=[12551519,-454,28]
}
Add(Memory,9246201,1427,333)
{
}
Add(GetDataEx,443059,1126,287)
{
link(Data,9135928:Result,[])
}
Add(LineBreak,16302653,1126,311)
{
Type=1
link(Data,443059:Var2,[])
Primary=[15851051,119,1]
}
Add(ArrayEnum,2257085,790,322)
{
link(onItem,9250038:doCalc,[(897,328)(897,286)])
link(onEndEnum,3988918:doEvent1,[(855,335)(855,349)])
link(Array,10480258:Var2,[(796,304)(793,304)])
}
Add(Hub,3988918,888,343)
{
link(onEvent1,16110325:doOperation,[(1106,347)(1176,347)(1176,346)])
link(onEvent2,1501520:doEnum,[(951,356)(951,608)])
}
Add(Memory,15060778,1154,532)
{
Default=String(0.01)
}
Add(ArrayEnum,1501520,1035,602)
{
link(onItem,145600:doCalc,[])
link(onEndEnum,2973558:doTimer,[(1135,615)(1135,706)])
link(Array,14709785:Var,[])
}
Add(GetDataEx,10480258,787,193)
{
link(Data,13232827:Array,[(793,182)(789,182)])
}
Add(MathParse,145600,1161,602)
{
DataCount=3
MathStr="%3-((%1*(1/(1+e^(%2))))/(1/(1+e^(%3))))"
link(onResult,5649291:doEvent1,[])
link(X1,15060778:Value,[(1167,583)(1160,583)])
link(X2,11167896:Var,[])
link(X3,13013882:Var,[])
}
Add(IndexToChanel,8608340,308,217)
{
Point(Index)
link(onEvent1,4320093:doFor,[(394,223)(394,139)])
link(onEvent2,931595:doData,[(464,230)(464,314)])
link(Index,11757201:Value,[])
}
Add(DoData,931595,476,308)
{
link(onEventData,13403264:doEvent1,[])
link(Data,7470258:Var,[])
}
Add(LineBreak,6727217,1567,742)
{
Type=1
link(Data,5818142:Text,[(1573,726)(1531,726)])
Primary=[7470258,-1091,-462]
}
Add(Hub,13403264,532,308)
{
OutCount=3
link(onEvent1,13232827:doText,[(686,314)(686,153)])
link(onEvent2,16178709:In,[])
link(onEvent3,15522394:doEvent2,[(630,328)(630,335)])
}
Add(LineBreak,10063462,1435,672)
{
link(Out,14779023:doEvent1,[])
Primary=[16178709,-798,-357]
}
Add(Memory,11757201,308,91)
{
Default=Integer(0)
}
Add(Hub,12276822,1225,700)
{
link(onEvent1,13552621:doData,[(1260,706)(1260,692)])
link(onEvent2,7839421:In,[(1260,713)(1260,727)])
}
Add(DoData,13552621,1281,686)
{
Data=Integer(1)
link(onEventData,7848787:In,[])
}
Add(LineBreak,8859062,259,84)
{
link(Out,11757201:doValue,[(299,90)(299,97)])
Primary=[7848787,1064,602]
}
Add(Hub,15036713,231,217)
{
InCount=2
OutCount=1
link(onEvent1,8608340:doEvent,[])
}
Add(LineBreak,7457174,182,231)
{
link(Out,15036713:doEvent2,[(222,237)(222,230)])
Primary=[7839421,1085,490]
}
Add(LineBreak,11444634,693,280)
{
link(Out,15522394:doEvent1,[(742,286)(742,328)])
Primary=[823416,-189,-112]
}
Add(Hub,15522394,756,322)
{
InCount=2
OutCount=1
link(onEvent1,2257085:doEnum,[])
}
Add(Timer,2973558,1162,700)
{
Enable=1
link(onTimer,12276822:doEvent1,[])
}
Add(Label,4660302,1288,217)
{
Left=5
Top=15
Width=116
Height=17
Caption="Какой результат хочу:"
}
Add(Button,13291767,1103,711)
{
Top=87
Width=179
Caption="Остановить"
link(onClick,2973558:doStop,[(1149,717)(1149,713)])
}
Add(CheckBox,5783179,1036,14)
{
Left=5
Top=110
Width=175
Caption="Есть работа"
}
Add(CheckBox,14479807,1110,11)
{
Left=180
Top=110
Width=175
Caption="Желания иметь свой дом"
}
Add(Label,12815975,1554,525)
{
Left=10
Top=140
Width=104
Height=17
Caption="У меня есть дом: %"
}
Add(Label,11844836,1554,574)
{
Left=120
Top=140
Width=4
Height=4
Caption=""
}
Add(Hub,5649291,1236,602)
{
link(onEvent1,9238156:In,[])
link(onEvent2,5818142:doAdd,[(1277,615)(1277,671)])
}
Add(Math,9689440,1498,574)
{
OpType=2
Op2=100
link(onResult,11844836:doText,[])
}
Add(Button,11684095,105,532)
{
Left=210
Top=135
Width=170
Caption="Узнать"
link(onClick,1810444:doEvent1,[])
}
Add(ArrayEnum,11872268,210,532)
{
link(onItem,3400600:doEvent,[(293,537)])
link(onEndEnum,12555394:doOperation,[(314,545)(314,643)])
link(Array,1331200:Var,[])
}
Add(LineBreak,6678867,1539,749)
{
Type=1
link(Data,5818142:Array,[])
Primary=[1331200,-1329,-259]
}
Add(Math,3705988,420,469)
{
OpType=2
link(Op2,3202119:Var,[])
}
Add(IndexToChanel,3400600,336,532)
{
Point(Index)
Point(Data)
link(onEvent1,3705988:doOperation,[(394,538)(394,475)])
link(onEvent2,4243685:doOperation,[(464,545)(464,482)])
link(Index,11748065:Var,[])
link(Data,11872268:Item,[(349,520)(254,520)(254,576)(216,576)])
}
Add(GetDataEx,13587347,1036,70)
{
link(Data,5783179:Checked,[])
}
Add(LineBreak,5539737,1001,91)
{
Type=1
link(Data,13587347:Var1,[(1007,75)])
Primary=[3310172,-504,350]
}
Add(Math,4243685,490,476)
{
OpType=2
link(Op2,3310172:Var,[])
}
Add(GetDataEx,7690501,1082,77)
{
link(Data,14479807:Checked,[(1088,60)(1116,60)])
}
Add(LineBreak,9534299,1120,91)
{
Type=1
link(Data,7690501:Var1,[(1126,82)])
Primary=[3202119,-693,350]
}
Add(Math,12555394,455,637)
{
link(onResult,7648739:In,[])
link(Op1,3705988:Result,[(461,569)(426,569)])
link(Op2,4243685:Result,[(468,571)(496,571)])
}
Add(LineBreak,6888472,1442,574)
{
link(Out,9689440:doOperation,[])
Primary=[7648739,-945,63]
}
Add(Button,6694263,98,357)
{
Left=210
Top=155
Width=170
Caption="Удалить"
link(onClick,1823499:doEvent1,[])
}
Add(LineBreak,15951247,259,98)
{
link(Out,11757201:doClear,[])
Primary=[10514145,-77,259]
}
Add(Hub,1823499,147,357)
{
link(onEvent1,10514145:In,[])
link(onEvent2,2684425:In,[])
}
Add(Hub,14779023,1498,672)
{
InCount=2
OutCount=1
link(onEvent1,5818142:doClear,[])
}
Add(LineBreak,14983604,1435,679)
{
link(Out,14779023:doEvent2,[])
Primary=[2684425,-1260,-315]
}
Add(LineBreak,859792,790,370)
{
Type=1
link(Data,2257085:Item,[(796,359)(796,359)])
Primary=[1287673,183,-216]
}
Add(LineBreak,8761235,819,210)
{
Type=1
link(Data,10480258:Var3,[(825,198)])
Primary=[14709785,216,364]
}
Add(LineBreak,12843045,1421,382)
{
Type=1
link(Data,9246201:Value,[(1427,374)(1433,374)])
Primary=[11167896,-253,125]
}
Add(LineBreak,1881234,217,602)
{
Type=1
link(Data,11872268:Index,[])
Primary=[11748065,119,-112]
}
Add(LineBreak,3099286,1035,655)
{
Type=1
link(Data,1501520:Item,[])
Primary=[13013882,140,-180]
}
Add(InfoTip,11302864,84,420)
{
Info=#42:Узнать новые ответы из известных подсчетов|
Width=463
Height=256
}
Add(InfoTip,3671835,77,329)
{
Info=#15:Обнулить работу|
Width=148
Height=74
}
Add(InfoTip,8917234,245,28)
{
Info=#25:Индекс: 0-первое обучения|22:1-продолжения обучения|
Width=162
Height=242
}
Add(InfoTip,4214946,413,84)
{
Info=#49:Зададим начальные веса случайным образом: w1; w2;|
Width=288
Height=123
}
Add(InfoTip,5449507,777,224)
{
Info=#61:Умножим входные данные на веса для формирования скрытого слоя|
Width=274
Height=165
}
Add(Hub,1810444,175,532)
{
InCount=2
OutCount=1
link(onEvent1,11872268:doEnum,[])
}
Add(LineBreak,15749151,140,546)
{
link(Out,1810444:doEvent2,[(172,552)(172,545)])
Primary=[9238156,1239,56]
}
Add(InfoTip,6402321,1057,210)
{
Info=#20:y_ = fn(h1 , h2, h3)|
Width=141
Height=158
}
Add(InfoTip,4077879,1232,203)
{
Info=#24:err = loss_func( у , y_)|
Width=253
Height=214
}
Add(InfoTip,8796384,952,427)
{
Info=#50:В результате получатся следующие обновленные веса:|0:|30:w1 = w1 — (n * d(err) / d(w1))|30:w2 = w2 — (n * d(err) / d(w2))|30:w3 = w3 — (n * d(err) / d(w3))|
Width=673
Height=347
}
Add(InfoTip,7596771,1078,658)
{
Info=#34:Остановить, когда все удовлетворит|
Width=281
Height=109
}
Add(InfoTip,16627571,35,119)
{
Info=#27:Начать учить или продолжить|
Width=204
Height=158
}
У меня только один вопрос, эта сеть может помочь для распознания чего-либо?
карма: 0
0
Ответов: 2059
Рейтинг: 131
#26: 2020-07-10 13:08:03 ЛС | профиль | цитата
Wabi-Sabi писал(а):
Походил, подумал, так не понял почему в hiasme нельзя сделать нейросеть.

Ты адекватный человек?
Ты меня провоцируешь?
Нейросеть это понятие, и не зависит от реализации! - на чём угодно!
Вот помню Леонид показывал шутку. тут должен быть смайлик большой палец вверх(не маостк я в закорючках). - не сердись!
Это процесс, а не система, и не декларация(как в прологе) и не функция!!! - чуишь разницу?
Решил почитать в интернете

На заборе и в википедии не то ещё пишут, стоит ли верить?
Надо набирать опыт!
Каждая итерация изменяет тебя и не нужные углы обламываются, а кои обломать - и смерти подобно.
Надо делать итерации - иначе не живёшь, но благородно, иначе всё не стоит свеч.
Ты меня добьёшь, но я не отступлюсь (если от количества затраченных лет не умру) - продолжаем разговор.
уже наверное заметно, что выпил

Редактировалось 7 раз(а), последний 2020-07-10 13:35:25
карма: 6

0
Ответов: 8888
Рейтинг: 823
#27: 2020-07-10 13:34:52 ЛС | профиль | цитата
Wabi-Sabi, сеть проводит сравнение СРАЗУ по всем заложенным обучением данным, остаётся выбрать максимальное совпадение. А компьютер может лишь имитировать сеть, сравнивая последовательно, да ещё и по точкам, предъявленные данные с теми, что имеются. Даже на быстродействующем компьютере процесс затягивается. Так что ваши хотелки на обычном компьютере не реализуемы.
Вот модель сети под названием "Перцептрон", работает через камеру, преобразует кадр в битовый рисунок 11х9 и сравнивает его с имеющимся обучением. Можете потренировать на его на что угодно. Обучение хранится в *.ini файле (там есть цифры от "1" до "5", заодно потренируетесь сами.
(Такую сеть я делал на аналоговых элементах в 16-ти летнем возрасте, правда транзисторов хватило на всего десяток точек, а здесь их аж 99 )
https://forum.hiasm.com/getfile/39072
карма: 19

0
Ответов: 2059
Рейтинг: 131
#28: 2020-07-10 15:12:43 ЛС | профиль | цитата
Wabi-Sabi писал(а):
сеть проводит сравнение СРАЗУ по всем заложенным обучением данным


Да!
сравнивая последовательно, да ещё и по точкам, предъявленные данные с теми, что имеются.

На это насрать и наплевать - надо абстрагироваться - иначе мы далеко не уйдём!
быстродействующем компьютере процесс затягивается. Так что ваши хотелки на обычном компьютере не реализуемый.

Это тоже полное непонимание граничащие с ересью.
Вот модель сети под названием "Перцептрон"
- знакомые и древние слова однако.
(Такую сеть я делал на аналоговых элементах в 16-ти летнем возрасте, правда транзисторов хватило на всего десяток точек, а здесь их аж 99 )

Ты гвоздика не пиз-ка, не путай хрен с пальцем.
Нейронная сеть не то, что как она сделана - архитектура, а искусство постановки задачи, - что на вход подавать будем? На выходе мы всегда знаем, что надеемся получить. Архитектура уже потом лепится.
Вот яркий пример полного не понимания: https://habr.com/ru/company/meanotek/blog/256593/
Спроси у него - получилось что? Ему не обязательно думать, он летает в облаках - у меня есть мысль и я её думаю.
Вообще-то дело обстоит так:
Все способы решения задачи равнозначны и от моды не зависят!
Пролог не модный! А может вы господа пытались квадратное катать и круглое носить в угоду моды?
Всё решается нейронными сетями! А может гараздей всё не усложнять и решить задачу процедурным способом? Ведь дверь, на самом деле, в другую сторону открывается без усилий.
Микроскопом не очень удобно забивать гвозди...
Что касается распознавания текста, то сетка - это небольшая и не самая сложная часть системы.
Она даёт только гипотезы, которые доказывает, или отвергает лингвистическая часть системы.
Это очень сложная иерархическая структура(компьютерная лингвистика).
Например, очень понятно, как сделать картины в стиле какого нибудь художника.
Хотя по времени и вычислительной мощности довольно затратно.
Я три года, как рыба об лёд бился, чтобы научит сетку писать рассказы - ни хрена!
Подошёл с другой стороны - всё пошло - даже сценарии отдельно лепит, и диалоги, и описания - обкатал в боевых условиях. Но это не одна сетка, а ещё структурированное дерево понятий, синонимов\антонимов.
Короче, не одной сетью крепок человек. И сетка ни причём, если сам не понимаешь, что на вход подаёшь.

Редактировалось 2 раз(а), последний 2020-07-10 17:51:58
карма: 6

0
28
Сообщение
...
Прикрепленные файлы
(файлы не залиты)