Прочтите прежде чем задавать вопрос!
1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas] … [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. «FAQ«, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение — только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы — на PM!
6. Одна тема — один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
|
Сообщение |
|
Новичок
Группа: Пользователи
Репутация: |
Вот пытаюсь реализовать обучение нейронной сети сложению чисел на Паскале. Т.е. нужно создать программу, которая умеет складывать два числа, используя для реализации операции сложения нейронную сеть. Предварительно нужно обучить нейронную сеть. |
|
|
Lapp |
Сообщение |
Уникум
Группа: Пользователи
Репутация: |
Забавно. ——————— я — ветер, я северный холодный ветер |
|
|
hardcase |
Сообщение |
code warrior
Группа: Пользователи
Репутация: |
Цитата(Legolas @ 10.05.2006 5:11) Предварительно нужно обучить нейронную сеть. Нейронная сеть — громко сказано. Это будет многослойный персептрон. Прикрепленные файлы ——————— ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк |
|
|
arhimag |
Сообщение |
Знаток
Группа: Пользователи
Репутация: |
А что такое нейронная сеть и по какому принципу должно происходить обучение? ——————— Чего хочет женщина – того хочет Бог |
|
|
Legolas |
Сообщение |
Новичок
Группа: Пользователи
Репутация: |
Вот пример: Пример моделирования А теперь рассмотрим простой пример, показывающий использование нейросети в прикладной программе. Предположим, что мы создаем программу, которая умеет складывать два числа, используя для реализации операции сложения нейронную сеть. Используем среду Delphi 4, для которой и разрабатывался данный модуль. s1 s2 res файл sum.txt Результаты обучения сохраним в файле sum.nnw На форме надо разместить два компонента TEdit, компонент TButton и TLabel (см ниже) Исходный текст модуля примет вид: Код unit Unit1; Только вместо Дельфи задачу надо решить на Паскале Надеясь, может уже кто-нибудь решал подобное |
|
|
hardcase |
Сообщение |
code warrior
Группа: Пользователи
Репутация: |
Немного не понял. Какой смысл писать на Паскале то, что уже реализовано в Делфи? ——————— ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк |
|
|
Legolas |
Сообщение |
Новичок
Группа: Пользователи
Репутация: |
Дело в том, что исходник на Дельфи не работает, да и вообще мы дельфи всего месяц назад начали проходить. Интересно, что ты имел в виду, сказав, что можно программу Дельфи переписать по-Паскальски? Там подключаемый модуль очень и очень длинный, да к тому же не работоспособный |
|
|
hardcase |
Сообщение |
code warrior
Группа: Пользователи
Репутация: |
Цитата(Legolas @ 11.05.2006 9:33) Дело в том, что исходник на Дельфи не работает Не знаю. У меня скомпилировался (хоть и с синтаксическими ошибками — пришлось исправить). Корни квадратные сеть считает, суммы считает, разности — тоже. Цитата(Legolas @ 11.05.2006 9:33) Интересно, что ты имел в виду, сказав, что можно программу Дельфи переписать по-Паскальски? Почти всегда можно. Только переносить замаешься. Цитата(Legolas @ 11.05.2006 9:33) Там подключаемый модуль очень и очень длинный Если он для тебя длинный… Значит ты не видел по-настоящему длинных модулей. ——————— ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк |
|
|
Legolas |
Сообщение |
Новичок
Группа: Пользователи
Репутация: |
Всем привет Код program intel; (*write(‘ Enter value of error> ‘); {znashenie oshibki} {Obyshenie neiroseti} Думаю что вссе уже o’key |
|
|
Lapp |
Сообщение |
Уникум
Группа: Пользователи
Репутация: |
Цитата(Legolas @ 12.05.2006 3:42) Думаю что вссе уже o’key Может и o’kAy, но я кое-чего не понимаю. Объясните, плз.. сеансов изм.1 изм.2 Прослеживается явная тенденция отхода от истинной суммы. Кроме того, настораживает то, что все они меньше точного значения. P.S. ——————— я — ветер, я северный холодный ветер |
|
|
Legolas |
Сообщение |
Новичок
Группа: Пользователи
Репутация: |
Да я и сам начал проходить нейросеть совсем недавно, всего 2 недели, как прохожу. |
|
|
-Михаил- |
Сообщение |
Гость |
Сильно наворочено…
. |
|
|
Гость |
Сообщение |
|||
Гость |
люди помогите!!!! надо обучить однослойный персептрон апроксимировать функции, на примере н=1/(1+k*t^2), где k>100 <…>
|
|||
|
||||
H0Bu40k |
Сообщение |
Гость |
сеансов изм.1 изм.2 Прослеживается явная тенденция отхода от истинной суммы. Кроме того, настораживает то, что все они меньше точного значения. P.S. Мне кажется Вы забыли поменять еще для m , я изменил значения n и m на 100, после этого он начал уже считать намного лучше))) |
|
|
Гость |
Сообщение |
Гость |
Цитата(lapp @ 12.05.2006 9:00) Цитата(Legolas @ 12.05.2006 3:42) Думаю что вссе уже o’key Может и o’kAy, но я кое-чего не понимаю. Объясните, плз.. сеансов изм.1 изм.2 Прослеживается явная тенденция отхода от истинной суммы. Кроме того, настораживает то, что все они меньше точного значения. P.S. Забыли про значение m, изменил n и m на 100. Начал считать намного лучше) |
|
|
-Максим- |
Сообщение |
Гость |
Цитата(Legolas @ 12.05.2006 7:42) Всем привет Код program intel; (*write(‘ Enter value of error> ‘); {znashenie oshibki} {Obyshenie neiroseti} Думаю что вссе уже o’key Столько лет висит этот пример))). Но все равно спрошу))). y:=1/(1+exp(-1*sum)); y:=a+b-v2[1]/5; То есть сначала получили выход нейросети, а потом его переписали на y=a + b — [случайное число из выборки] и ждем что что то у нас сойдется? |
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
Связь с администрацией: bu_gen в домене octagram.name
56 / 0 / 1 Регистрация: 12.03.2014 Сообщений: 7 |
|
1 |
|
Реализация нейросети и обучение методом обратного распространения ошибок25.05.2014, 19:44. Показов 6585. Ответов 2
Здравствуйте. Очень нужна помощь. Есть хорошая статья с примерами кода для реализации нейросети в паскаль. Добавлено через 1 час 55 минут
__________________
0 |
Модератор 9488 / 4819 / 3213 Регистрация: 17.08.2012 Сообщений: 15,115 |
|
26.05.2014, 12:25 |
2 |
Если что могу выложить рабочий код на паскале. Конечно, выкладывайте. Правило форума: 4. 11. Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме — есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ.
0 |
Keylan93 56 / 0 / 1 Регистрация: 12.03.2014 Сообщений: 7 |
||||
26.05.2014, 17:20 [ТС] |
3 |
|||
РешениеВот программа. Здесь правда входной и выходной вектор введены всего один раз, но думаю циклом все смогут вставить больше.
0 |
Библиотека для моделирования нейронных сетей глубокого обучения.
Разрабатывается на языке Object Pascal Delphi XE.
Основные функции:
Создание и обучение математических моделей нейронных сетей на основе перцептронов глубокого обучения (Deep Learning) методом обратного распространения ошибки, различной архитектуры. Архитектура нейронной сети может быть достаточно вариативна, она состоит из различных слоев нейронов, соединенных между собой матрицами связей.
Основные структурные единицы нейронной сети реализованы в виде объектов:
- Нейронная сеть (TNeuronalNet) – объект, представляющий из себя список объектов (TObjectList) слоев из которых состоит нейросеть в порядке их расположения
от входного слоя к выходному. Принцип расположения по порядку распространения активности нейронов сети. Методы объекта TNeuronalNet позволяют добавлять (AddLayer) и удалять
(DeleteLayer) слои , а также подсети (AddSubnet, DeleteSubnet), представляющие отдельный список свойство Subnets (см. объект подсеть TSubnet).
Сначала активизируются входные слои, за ними скрытые и в самом конце выходные (метод Activate). Обучение (обратное распространение ошибки) происходит в обратном порядке,
от выхода ко входу (метод Learn). Последовательная активация и обучение реализуются методами (Activate и Learn) объекта TNeuronalNet в которых последовательно вызываются
соответствующие методы слоев.В новой версии (Декабрь 2018) добавлено сохранение сети в формат XML. - Объект Слой (TLayer) – представляет список нейронов, входящих в этот слой. Все нейроны слоя активируются и обучаются одновременно, используя методы слоя для вызова методов активации (Activate) и обучения (Learn) каждого нейрона. Также, методы объекта позволяют добавлять нейроны в список и удалять их. Типы слоев: InputL – входной слой, HiddenL – выходной слой, ContextInputL – Контекстный слой на который приходит возбуждение с выходного слоя на предыдущем цикле, ContextOutputL – Выходной контекстный слой который на следующем цикле будет возбуждать входной контекстный, ManageL – управляющий слой, содержащий нейроны, имеющие фиксированные значения активации для управления порогами активации нейронов различных слоев. Также существуют методы добавления и удаления нейронов CreateNeuron, DeleteNeuron, CreateNeurons(NumberNeurons). Методы добавления связей с нейронами другого слоя — ConnectToLayer(Layer).
- Объект подсеть (TSubNet) – также представляет список нейронов, которые могут относиться к разным слоям от выходных до входных. У каждой такой подсети есть относящиеся к ней выходные нейроны, относящиеся к определенным выходным слоям, которые определяют ошибку, распространяющуюся только по нейронам данной подсети. Если нейрон относится к данной подсети, его входные связи обучаются относительно ошибки, распространяемой от выходных нейронов только данной подсети. Если нейрон не относится ни к одной подсети, его связи при обучении не модифицируются. Любой нейрон может относиться к нескольким подсетям и обучаться от ошибок всех этих подсетей.
- Объект нейрон (TNeuron) – представляет список всех входных связей (объектов TConnection) от данного нейрона. В нем также содержаться методы осуществляющие активацию (Activate), распространение ошибки (SendSigma) и обучение (модификацию связей) (Learn). Также объект TNeuron содержит список значений ошибок (равный списку подсетей), за которые отвечал данный нейрон (вычисленные при использовании процедуры обратного распространения ошибки) полученные от выходов различных подсетей.
- Объект связь (TConnection) – содержит величину связи, ссылку на объект нейрон-владелец и объект нейрон предыдущего слоя с которым владелец связан.
Загрузка библиотеки NeuronalNet.pas для созлания нейронных сетей
Загрузка библиотеки BCNN.pas для создания нейросетевых моделей BCNN (Brain Centers Neuronal Network)
Загрузка испоняемого файла BCNNWin.exe для обучения нейросетевых моделей BCNN по ЭЭГ (Brain Centers Neuronal Network)
Я описывал каждый отдельный нейрон как запись, содержащую все необходимые части:
- Список весовых коэффициентов для связей между
данным нейроном и всеми нейронами предыдущего
слоя (или входными данными, если нейрон находится
во входном слое). Каждый весовой коэффициент —
действительное число (по 1 весовому коэффициенту
на нейрон предыдущего слоя) - Пороговый уровень (см. далее) (см. также
примечание переводчика в конце главы) - Значение ошибки. Используется только на стадии
обучения. Эта величина необязательно дожна быть
связана с нейроном, я сделал это только для
удобочитаемости кода. - Изменение ошибки. Также используется только во
время обучения.
Вот само описание нейрона:
const NUM = 10; type weights_type = array [1..NUM] of real; neuron_type = record w : weights_type; a : real; threshold : real; E : real change : weights_type; t_change : real; end;
Выходной сигнал нейрона хранится в
поле a (так называемая активность
нейрона). Нейрон должен отреагировать на
входной сигнал, поступающий по взвешенным
связям, вычислив при этом выходной сигнал. Для
трансформации входных сигналов в выходные
необходима функция.
Ниже приведена декларация узлов с
помощью переменных. Постоянные обозначают
количество нейронов во входном, скрытом и
выходном слое:
const MAX_INP = 4; MAX_HID = 4; MAX_OUT = 2; var ipl : array [1..MAX_INP] of neuron_type; hl : array [1..MAX_HID] of neuron_type; ol : array [1..MAX_OUT] of neuron_type;
Активационные (переходные) функции
На протяжении ряда лет для превращения
входных сигналов в выходные использовалось
несколько типов функций. На приведенных ниже
рисунках показаны графики некоторых из наиболее
часто используемых. По горизонтали — сумма
входных сигналов (см. ниже), по вертикали —
значение функции. Все функции выдают результат в
диапазоне от 0 до 1.
Эта функция, как считается, наиболее
точно описывает активность настоящих нейронов
мозга и наиболее часто используется в
искусственных нейронных сетях. Код на паскале
для этой функции:
function sigmoid (x : real) : real; begin sigmoid := 1/(1 + exp(-x)) end;
Однако паскалевская функция exp
приводит к ошибке в программе, если входное
значение выходит из промежутка -39..38. К счастью,
эти настолько значения далеко отстоят от начала
координат, что мы можем считать: при аргументе
< -39 значение функции равно 0, при аргументе > 38, —
значение функции равно 1. Для предотвращения
ошибки добавим несколько строчек:
function sigmoid (x : real) : real; begin if abs(x) < 38 then sigmoid := 1/(1+exp(-x)) else if x >= 38 then sigmoid := 1 else sigmoid := 0 end;
Пороговое значение
На практике настоящие нейроны не срабатывают (не
выдают выходной сигнал) до тех пор, пока уровень
входного сигнала не достигнет некоторого
порогового значения, т.е. на вход нейрона
поступает сумма взвешенных сигналов минус
некоторая величина. Полученное значение
проходит через активационную функцию. Таким
образом, общая формула выглядит так:
1 | ||
a = |
|
|
-(Si aiwi — Q) | ||
1 + e |
где
a — активность нейрона,
ai — активность i-ого нейрона предыдущего слоя (или i-ое входное
значение, если мы вычисляем активность нейрона
входного слоя),
wi — вес связи между данным нейроном и i-ым нейроном предыдущего слоя.
Каждая активность нейрона предыдущего слоя умножается
на соответствующий весовой коэффициент,
результаты умножения суммируются, вычитается
пороговое значение, вычисляется значение
сигмоидной функции. Вот пример на турбо паскале:
procedure run_network; var i,j : byte; sum : real; begin for i:=1 to MAX_INP do with ipl[i] do begin sum:=0; for j:=1 to NUM_INPUTS do sum:=sum + w[j] * test_pat[j]; a:=sigmoid(sum - threshold) end; for i:=1 to MAX_HID do with hl[i] do begin sum:=0; for j:=1 to MAX_INP do sum:=sum + w[j] * ipl[j].a; a:=sigmoid(sum - threshold) end; for i:=1 to MAX_OUT do with ol[i] do begin sum:=0; for j:=1 to MAX_HID do sum:=sum + w[j] * hl[j].a; a:=sigmoid(sum - threshold); end; end;
Эта процедура состоит из трех очень
похожих друг на друга блоков, по блоку на каждый
слой нейронной сети. Выражение «with»
позволяет обращаться к полям записей без
упоминания самой записи, т.е. кусок кода:
полностью аналогичен:
Каждый слой нейронов базируется на
выходе предыдущего слоя (за исключением входного
слоя, базирующегося непосредственно на
предъявляемых сети входных данных (в коде —
массив test_pat). Это значит, что значения входного
слоя должны быть полностью расчитаны до
вычисления значений скрытого слоя, которые в
свою очередь, должны быть рассчитаны до
вычисления значений выходного слоя.
Выходы нейронной сети — значения
активностей (поле a) нейронов выходного слоя.
Программа, симулирующая работу нейронной сети, в
процессе обучения будет сравнивать их со
значениями, которые должны быть на выходе сети.
Например, если нейронная сеть
используется для того, чтобы определить, персона
какого пола запечатлена на фотографии, то
возможно существование двух нейронов в выходном
слое: для мужского пола на выходе «М» должно
появиться значение 1, а на выходе «Ж» — 0.
Соответственно, при предъявлении сети женской
фотографии, выходные нейроны выдают обратные
значения («М»=0, «Ж»=1). На практике, если
на выходе «М» — число 0.0261, а на выходе «Ж»
— число 0.9932, то сеть выдает заключение о том, что
на фотографии — женское лицо (точных значений 1
или 0 вряд ли можно добиться).
Если вам каким-либо образом уже
известны весовые коэффициенты, то следующую
главу можете смело пропустить. В противном
случае, вам все таки придется приступить к
обучению сети и столкнуться с понятием обратного
распространения ошибки…
примечание переводчика:
В литературе более распространен
несколько отличающийся подход к «пороговому
уровню». Боулс использует именно слово «пороговый»
(threshold), подразумевая биологическую сторону
вопроса (т.е. природу реального нейрона). В
литературе обычно используют другой термин — «смещение»
(bias), обосновывая необходимость введения такой
величины математически (обеспечивается смещение
кривой графика относительно 0, а как следствие
большая гибкость функции). Такое расхождение,
однако, не приводит к коренным разногласиям в
реализации и математическом аппарате.
Предыдущая | Оглавление | Следующая |
нейронная сеть
Модератор: Модераторы
нейронная сеть
Подскажите есть ли на freepascale компоненты или библиотеки для организации нейро сети?
Примеры кода?
Какие есть варианты?
- Crystal_Ra
- новенький
- Сообщения: 11
- Зарегистрирован: 24.03.2011 18:14:39
Re: нейронная сеть
скалогрыз » 11.04.2014 23:26:54
- скалогрыз
- долгожитель
- Сообщения: 1801
- Зарегистрирован: 03.09.2008 02:36:48
Re: нейронная сеть
svk12 » 12.04.2014 02:38:34
- svk12
- постоялец
- Сообщения: 387
- Зарегистрирован: 09.06.2008 18:42:47
Re: нейронная сеть
Crystal_Ra » 15.04.2014 13:33:07
а разработки на freepascale ?
может и в Лазаря компонет есть?
ну или какие-то живые работающие примеры ?
- Crystal_Ra
- новенький
- Сообщения: 11
- Зарегистрирован: 24.03.2011 18:14:39
Re: нейронная сеть
svk12 » 15.04.2014 17:54:36
Этот пакет после преобразования из меню «Сервис» спокойно устанавливается
в Лазаря.
Примеры работают, аналогично, после преобразования.
- svk12
- постоялец
- Сообщения: 387
- Зарегистрирован: 09.06.2008 18:42:47
Вернуться в Общее
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Нейронная Сеть На Pascal — 1
Matrixcoding
HD
12:18
Нейронная Сеть На Pascal — 1
Дата публикации:
24.08.2017 12:29
Продолжительность:
12:18
Ссылка:
https://thewikihow.com/video_gnxS4uIeBs0
Действия:
Источник:
Описание
Подписывайтесь на наш Telegram канал!@thewikihowоткрытьМониторим видео тренды 24/7
Explore more videos from Matrixcoding
Фото обложки и кадры из видео
Нейронная Сеть На Pascal — 1, Matrixcoding
https://thewikihow.com/video_gnxS4uIeBs0
Аналитика просмотров видео на канале Matrixcoding
Гистограмма просмотров видео «Нейронная Сеть На Pascal — 1» в сравнении с последними загруженными видео.
Теги:
Neural Network
Нейронная Сеть
Похожие видео
11:10
907 627 просмотров.
19:57
60 447 просмотров.
10:00
398 335 просмотров.
42:45
171 779 просмотров.
08:12
6 333 просмотра.
17:17
1 256 699 просмотров.
06:31
1 929 072 просмотра.
08:08
1 621 просмотр.
06:55
34 952 просмотра.
Рекомендованные вам
36:20
37:34
30:36
14:54
11:33
14:47
14:49
07:04