Форум программистов, компьютерный форум, киберфорум
ИИ, нейросети, LLM, ML, Data Science, ИИ-агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/41: Рейтинг темы: голосов - 41, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 17.10.2008
Сообщений: 12

Нейронные сети (NN)

23.10.2008, 00:55. Показов 8491. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Продвинутый народ, кто нибудь писал ручками нейронную сеть?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2008, 00:55
Ответы с готовыми решениями:

Нейронные сети
Расскажите что знаете про нейронные сети, кто что думает об этом? Можно ли реализовать эту сеть на Visual basic 2010

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

Нейронные сети
Здравствуйте. Вопрос обобщенный, не уверен, в тот ли форум написал. Решил я начать изучение нейронных сетей. Создал свой первый...

20
сцуко киборг
 Аватар для Жестянка
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
23.10.2008, 01:26
В настоящее время занимаюсь близкой к НС штукой.

А какая архетектура тебя интересует?

Добавлено через 1 минуту 12 секунд
тока я не сафсем продвинутый.
0
365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 401
23.10.2008, 12:26
=))) я только буду писать в ближайшем будущем...+) так что за топиком послежу +))
0
мичуринец
23.10.2008, 12:43
тож занимался )) даже подобие редактора нейронной сети сделал, но.... забросил, мозгов не хватило %)

Если надо... редактор остался.... .Так...чисто посмотреть как не надо делать
0 / 0 / 0
Регистрация: 17.10.2008
Сообщений: 12
23.10.2008, 17:13  [ТС]
Полносвязная нейронная сеть прямого распростронения сигнала (многослойный персептрон), алгоритм обучения обратного распространения ошибкии!
Да и еще конечно хотелось бы алгоритм заточить под многопоточность! А иначе зачем мне 4 ядра

Добавлено через 4 минуты 8 секунд
мичуринец спасибо конечно, но как таковой редактор сети не нужен!
Есть некоторые исходники на с++, да вот как правило проще самому написать, чем разбираться в чужом коде!
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
23.10.2008, 17:59
Rejie, В чем,собственно,заключается ваш...вопрос?
Пока что не вижу никакого осмысленного содержания темы.
0
сцуко киборг
 Аватар для Жестянка
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
23.10.2008, 20:35
У меня мозгов пока хватило на однослойный перцептрон, обучающийся по алгоритмуестественного обучения(итеррационное решение системы по методу Качмажа). Есть исходники.
0
0 / 0 / 0
Регистрация: 17.10.2008
Сообщений: 12
23.10.2008, 20:55  [ТС]
От однослойного понта не много! Что с ним делать???
Вот многослойный уже сила!
Нда видимо Нейронными сетями здесь народ интересуется мало! Как я заметил в основном хотят, чтобы им решили домашнее задание или курсовик, да еще и бесплатно! Радует что спецы по С++ имеются!
0
сцуко киборг
 Аватар для Жестянка
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
23.10.2008, 22:36
Лучший ответ Сообщение было отмечено как решение

Решение

От однослойного понта ©е много! Что с ним делать???
да ну? А у нас он шероховатость поверхности по фотографии определяет. С точностью до микрометра.
И в медицине деагноз по анамнезу ставит...
Правда дело тут не только в самой структуре, но и в обучении.
Или считаеш за слой рецепторы? Если так, то двухслойный получаецца.
А я сейчас пытаюсь реализовать сеть Коско в приложении к системам с многотактовым алгоритмом действия.
А однослойный перцепторон вполне можно расширить на парочку слоёв: добавляем ещё один или два объекта пипа "слой сети" и последовательно формируем для них входные данные из выходных предшествующего слоя.
Тока вот с обучением всё не так просто. Качмажом уже не отделаешся.
Да и зачем? Теоретически для решения любой задачи достаточно одного слоя (если выполняются условия сходимости обучения). Хотя на практике всё опять же не так просто.

А ты где применять собираешся? Или пока просто абстрактно?
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
24.10.2008, 12:12
Господа и Дамы,перенес тему в раздел "обо всем",поскольку создана она для общения,а не обсуждения технических деталей.
Если потребуется тема для обсуждения технической/теоретической стороны реализации и обучения НС,просто создайте новую в соответствующем разделе.
0
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
25.10.2008, 23:26
по мне нейронные сети -это вопрос достаточно не изучен .
Тем более ,если сгруппировать вопросы от разных людей в вектор, то его начало будет в простейшей перцептронной сети через одиночный искуственный интелект идет в сторону сообщества искуственных интеллектов . Почему так ? Все очень просто . Как и любому интелекту для роста нужно общение и конкуренция со стороны аналогичных образований. В результате это происходит обучение и самообучение,отсев не нужных стратегий.
Но если вопрос не стоит в создании искусственого интеллекта , то то что ты называешь нейронными сетями так или иначе применяется в сетевых технологиях . Сеть она и в Африке сеть.
0
сцуко киборг
 Аватар для Жестянка
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
26.10.2008, 10:44
qwone, хмм...
шойто-ты, по-моему всё в кучу собрал...

Взаимодействие нейронок между собой эт конечно интересно... Но на современном этапе развития даже если и говорят о "сомообучении", то имеют в виду автоматизированное обучение, начальным обучателем и конечным проверяющим в котором всёравно является человек (или алгоритм, жестко заложенный человеком).

Вообще с самого появления нейронок их упорно пытаются назвать исскуственным интеллектом, что приводит к чуть ли не религиозному поклонению им (нейронкам) одних и яростной ненавитсти других, не очень понимающих суть, людей.

На самом деле любая НС это просто очередной АЛГОРИТМ, позволяющий выразить трудно формализуемые связи между величинами и делать вывод с определенной точностью в незнакомой сетуации на основе преобретенного опыта (для чего и применяются, и вполне успешно).
Но именно АЛГОРИТМ и ничего более.

Да, предполощительно этот алгоритм позаимствован у нервной системы животных.
Такще как и некоторые другие принципы, применяемые в технике, позамнствованы у природы.
Однако, нейронка похожа на нервную систему не больше (ато и меньше), чем, например, матрица цифрового фотоаппарата на фасеточный глаз стрекозы.

Насчет "сетевых технологий": интересно, что ты имел в виду под этим словом?
Эсли технологии, применяемые для объединения в сети обычных компьютеров, то может, конечно, и применяются, но я лично о таком не слышала. А смешивать компьютерную сеть с НС только потому, что в ихназвании есть одно и то же слово - совершенно некорректно (почему бы тогда и "сеть супермаркетов" суда же не прилепить?).
НС - четко одганизованная сеть относительно простых эллементов (нейронов), основной характеристикой которых является проводимость. Сигнал поступает в НС через слой рецепторов и, проходя через каждый нейрон (иногда по несколько раз) преобразуется в отклик т.е. реакцию системы.
Относительно же сети компьютерной невозможно выделить ни слой рецепторов ни отклик. А самое главное - каждый её эллемент - самобытная и самодостаточная система, что невозможно для НС.

Хотя у нас был один аспирант, который пытался представить интернет как нейронную сеть... Теперь в дурке лечится. %)
0
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
26.10.2008, 19:42
Жестянка
Я повторюсь , если собрать все ответы людей и даже те которые еще будут то можно их расположить в виде вектора
примитивная пепсейтроная сеть - интеллектуальный компьютер- сеть интеллектуальных компьютеров.
То что люди считают венцом творения человека это заблуждение . Которое обычно не приводит неприятностям в жизни каждого . Вообще-то венцом творения является человеческое сообщество . И именно оно самообучает человека ,как компонент данного целого. Поэтому все попытки создания человеком Искусственного интеллекта так или иначе приведут к краху . Надо создавать именно сообщество Искуственных Интеллектов . И интернет (сетевые) технологии это позволят.
А теперь про алгоритм . В мире господствует разделение труда и международная кооперация . А это значит что для каждого участника расписан свод правил поведения. На основе этих правил существует конечного число стратегий . А стратегии это алгоритмы поведения . Причем ,если заметишь, все строится на людском материале , без зависимости от цвета кожы и обитания.
И исходя из этого ,то каждый человек это всего навсего "умный" пепсейтрон. Хотя иногда человек и поступает не разумно ,а по инерции мышления. Значит просто пепсейтрон .
0
сцуко киборг
 Аватар для Жестянка
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
26.10.2008, 22:03
qwone, прости. Не сразу тебя поняла... Выражаесся как-то запутанно %)...
Мысль очень интересная. Хотя относится по-моему уже к философии, а не кодингу. Читал Де-Шардэна "Феномен человека"? Он жил пол сотни лет назад, а пишет схожие вещи. Только про интернет он тогда не догадался.
Повторяю ещё раз - мысль очень интересная и, я думаю, найдутся ещё желающие её обсудить.
По-этому предлагаю создать отдельный топ. Например "Интернет, как предпосылка создания коллективного разума" или "Интернет, как точка "Омега"", например .
0
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
26.10.2008, 23:36
Чего эту мысль обсуждать . Ты уже скоро увидишь эту реализацию . То что роботы будут ходить по улицам - это не реально . Но то что ИИ будет рисовать сетевые программы по задачам заданными людьми будет . Да и чипы тоже разрабатывать будут сами. А может и геными разработками тоже будут заниматься . Так что философией будут заниматься только люди . А кодингом будет жить ИИ.
0
сцуко киборг
 Аватар для Жестянка
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
26.10.2008, 23:47
qwone, ну эт уж как-то слишком фатально...
Хотя...
Слышал про разработку принципиально новой всемирной сети?
Она должна поддерживать доступ не только к инфе, находящейся на другом компе, но и к его (другого компа) вычислительным ресурсам. Вот когда эта сеть будет распространена также, как сейчат интернет, тогда возможно будет функционирование проги с использованием ресурсов ВСЕХ КОМПОВ, ПОДКЛЮЧЕННЫХ К СЕТИ! Вот эта прога, возможно, и будет ИИ.

Добавлено через 1 минуту 35 секунд
Но сётаки давай определимся о каком интеллекте мы говорим: коллективном человеческом или исскуственном? Или коллективном исскуственном? %)
0
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
27.10.2008, 00:17
интелект это способность решать задачу выживаемости за счет воздействия на среду обитания. Или проще решать задачу не рождаемостью ,а на более качественном уровне. Любая среда обитания имеет ограниченный набор ресурсов вполне определенного способа доступа . И это ограничивает рост популяции . поэтому задача этой популяции расширить этот набор ресурсов , сделать тяжело доступные ресурсы легкодоступными . Поэтому интелект бывает только коллективным . Конечно можно сказать , что человек обладает интеллектом . Но ведь не всегда это приведет к его успехам в человеческом обществе . Хотя результаты работы его интеллекта могут стать результатами коллективного интеллекта. И что бы дальше не запутывать интелект обладает масштабируемостью . Чем больше компонентов в него входит - тем с большой вероятность он сможет решить свое предназначение . Не зависимо от его наполнения человеческого или компьютерного. А сейчас особенно уже идет симбиоз человека и компьютера.
0
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
29.10.2008, 22:14
для интеллекта живущего в сетевом пространстве нужны органы чувств . Но человеческие глаза и уши(веб-камеры или микрофоны )не нужны . Вот представим , что сетевое ИИ существует . То какое оно будет .Во-первых оно состоит из "клеток"-пепсептронов . Я не знаю как это будет называться в будущем. Я назову это ПЕРСОМ . ПЕПСЫ 1 уровня - это кончики органов чувств . Они забрасываются в чужие пространства для определения иго свойств (IP адрес статический динамический, производительность , режим работы [круглосуточный или ограниченый режим работы],защищеннось и обитаемость другими ИИ, какой процессор обслуживает ).
ПЕПСЫ 2 уровня происходят из ПЕПСОВ 1 уровня путем последовательного абгрейта ис центра ИИ. Находятся в пространстве которое может принять все или часть ИИ . Необходимо для отступления ИИ из мест прежнего обитания и сохранения себя.
Вообще ПЕПСОВ я насчитал 10 . Но они являются модификациями этих.

Добавлено через 3 часа 55 минут 40 секунд
Вот еще . ИИ должен быть кросплатформен и работать на любом процессоре .Вот еще он должен самообслуживаться , то есть писать на своем внутреннем языке код своих клеток ПЕПСОВ и компилировать своим компилятором(или компиляторами) под процессор среды в которую он будет забрасывать.
Если все же кто-то захочет реализовать эту систему ,то надо создать закрытую сеть из десятков компьютеров . Затем на одном поселить ИИ . А потом изгнать его из этого компьютера в другой . а потом из другого в третий .четвертый . И если после этого он останется жизнеспособный и не ущербленный - то вы уже на правильном пути . Можете его совершенствовать дальше.
0
3 / 3 / 1
Регистрация: 17.01.2009
Сообщений: 15
03.02.2009, 22:10
Вот пример многослойного персептрона обучающегося по алгоритму обратного распостранения ошибки:

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
using System;
namespace PersLab5 {
    public class Neuron
    {
        public static bool ActivationStep(double s, double t)
        {
            return s>t;
        }
 
        public static double ActivationLinear(double s, double k)
        {
            return s*k;
        }
 
        public static double ActivationSigma(double s, double alpha) 
        {
            return 1/(1+Math.Exp(-alpha*s));
        }
 
        public static double ActivationSigmaDif(double y, double alpha) 
        {
            return alpha*y*(1-y); 
        }
    }   
}
using System;

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
namespace PersLab5
{
    /// <summary>
    /// Персептрон
    /// </summary>
    public class NeuralNetwork {
        private int m_NumIn;      // Количество входов
        private int m_NumOut;     // Количество выходов
        private int m_NumLayer;   // Количество скрытых слоёв
        private int m_NumNeirons; // Количество нейронов в скрытых слоях
        private double m_Alpha;   // 
        private double[][,] w;    // Массив весов синоптических связей
        private double[][] m_y;
 
        /// <summary>
        /// Количество входов
        /// </summary>
        public int NumIn{get{return m_NumIn;}} 
        /// <summary>
        /// Количество выходов
        /// </summary>
        public int NumOut{get{return m_NumOut;}}
 
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="NumIn">Количество входов</param>
        /// <param name="NumOut">Количество выходов</param>
        /// <param name="NumLayer">Количество скрытых слоёв</param>
        /// <param name="NumNeiron">Количество нейронов в скрытом слое</param>
        public NeuralNetwork(int NumIn, int NumOut, int NumLayer, int NumNeiron, double Alpha) {
            m_NumIn=NumIn;
            m_NumOut=NumOut;
            m_NumLayer=NumLayer;
            m_NumNeirons=NumNeiron;
            m_Alpha=Alpha;
            // Создание массива промежуточных выходов нейронов
            m_y = new double[m_NumLayer+1][];
            m_y[m_NumLayer] = new double[m_NumOut];
            for(int i=0; i<m_NumLayer; i++)
                m_y[i] = new double[m_NumNeirons];
            // Инициализация весов синоптических связей случайными числами
            w = new double[m_NumLayer+1][,];
            w[0] = new double[m_NumNeirons, m_NumIn];
            for(int i=1; i<m_NumLayer; i++)
                w[i] = new double[m_NumNeirons, m_NumNeirons];
            w[m_NumLayer] = new double[m_NumOut, m_NumNeirons]; 
        }
 
        /// <summary>
        /// Инициализация весов синоптических связей случ. числами
        /// </summary>
        public void InitW()
        {
            Random rand = new Random();
            for(int i=0; i<m_NumNeirons; i++)
                for(int j=0; j<m_NumIn; j++)
                    w[0][i, j]=rand.NextDouble();
            for(int k=1; k<m_NumLayer; k++)
                for(int i=0; i<m_NumNeirons; i++)
                    for(int j=0; j<m_NumNeirons; j++)
                        w[k][i, j]=rand.NextDouble();
            for(int i=0; i<m_NumOut; i++)
                for(int j=0; j<m_NumNeirons; j++)
                    w[m_NumLayer][i, j]=rand.NextDouble();
        }
 
        /// <summary>
        /// Возвращает вектор выходов от вектора входов
        /// </summary>
        /// <param name="x">Вектор входов</param>
        /// <returns>Вектор выходов</returns>
        public double[] Out(double[] x) 
        {
            for(int i=0; i<m_NumNeirons; i++)
            {
                double s=0;
                for(int j=0; j<m_NumIn; j++)
                    s+=w[0][i, j]*x[j];
                m_y[0][i]=Neuron.ActivationSigma(s, m_Alpha);
            }
            for(int k=0; k<m_NumLayer; k++) {
                int N;
                if(k==m_NumLayer-1)
                    N=m_NumOut;
                else N=m_NumNeirons;
                for(int i=0; i<N; i++) {
                    double s=0;
                    for(int j=0; j<m_NumNeirons; j++)
                        s+=w[k+1][i, j]*m_y[k][j];
                    m_y[k+1][i]=Neuron.ActivationSigma(s, m_Alpha);
                }
            }
            return (double[])m_y[m_NumLayer].Clone();
        }
 
        /// <summary>
        /// Ошибка персептрона для выборки (x, d)
        /// </summary>
        /// <param name="x">Вектор входов</param>
        /// <param name="d">Желаемый вектор выходов</param>
        /// <returns>Ошибка</returns>
        public double GetSituationError(double[] y, double[] d) {
            double error=0;
            for(int i=0; i<m_NumOut; i++) {
                error+=(y[i]-d[i])*(y[i]-d[i]);
            }
            return Math.Sqrt(error)/m_NumOut;
        }
 
        public double GetError(int size, double[][] X, double[][] D) {
            double error=0;
            for(int p=0; p<size; p++)
                error=Math.Max(error, GetSituationError(Out(X[p]), D[p]));
            return error;
        }
 
        /// <summary>
        /// Коррекция весов синоптических связей
        /// </summary>
        /// <param name="x">вектор входов</param>
        /// <param name="d">требуемый вектор выходов</param>
        /// <param name="tetta">коэффициент обучения</param>
        void Correct(double[] x, double[] d, double tetta) {
            // Вычисляем выходы всех слоёв
            Out(x);
            // Выделяем память под delta
            double[][] delta = new double[m_NumLayer+1][]; 
            delta[m_NumLayer] = new double[m_NumOut];
            for(int i=0; i<m_NumLayer; i++)
                delta[i] = new double[m_NumNeirons];
            // Вычисляем delta и корректируем веса синоптических связей
            for(int i=0; i<m_NumOut; i++) {
                delta[m_NumLayer][i]=(m_y[m_NumLayer][i]-d[i])*Neuron.ActivationSigmaDif(m_y[m_NumLayer][i], m_Alpha);
                for(int j=0; j<m_NumNeirons; j++)
                    w[m_NumLayer][i, j]-=tetta*delta[m_NumLayer][i]*m_y[m_NumLayer-1][j];
            }
            for(int l=m_NumLayer-1; l>=0; l--) {
                for(int i=0; i<m_NumNeirons; i++) {
                    int N;
                    if(l==m_NumLayer-1)
                        N=m_NumOut;
                    else N=m_NumNeirons;
                    double s=0;
                    for(int k=0; k<N; k++)
                        s+=delta[l+1][k]*w[l+1][k, i];
                    delta[l][i]=s*Neuron.ActivationSigmaDif(m_y[l][i], m_Alpha);
                    if(l==0) {
                        for(int j=0; j<m_NumIn; j++)
                            w[0][i, j]-=tetta*delta[0][i]*x[j];
                    }
                    else
                        for(int j=0; j<m_NumNeirons; j++)
                            w[l][i, j]-=tetta*delta[l][i]*m_y[l-1][j];
                }
            }
        }
 
        /// <summary>
        /// Обучение
        /// </summary>
        /// <param name="size">Размер выборки</param>
        /// <param name="x">Массив векторов входов</param>
        /// <param name="d">Массив векторов требуемых выходов</param>
        /// <param name="eps">Погрешность</param>
        /// <param name="tetta">Скорость обучения</param>
        /// <param name="MaxStep">Максимальное количество иттераций</param>
        /// <returns>Количество иттераций за которое обучилась нейронная сеть</returns>
        public int Learn(int size, double[][] x, double[][] d, double eps, double tetta, int MaxStep) {
            InitW();
            int t=0;
            while((GetError(size, x, d)>eps)&&(t<MaxStep)) {
                t++;
                for(int p=0; p<size; p++)
                    Correct(x[p], d[p], tetta);
            }
            return t;
        }
    }
}
2
сцуко киборг
 Аватар для Жестянка
103 / 30 / 4
Регистрация: 11.09.2008
Сообщений: 193
19.02.2009, 20:57
Лучший ответ Сообщение было отмечено как решение

Решение

А вот пример однослойного перцептрона, обучаемого по алгоритму естественного обучения:
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//................................................................
int round(double D)  // округление (чтобы целую библиотеку не подключать)
        {
        double Cel=D/1;
        if(D-Cel>=0.5)
                {
                return int(Cel+1);
                }
        else
                {
                return int(Cel);
                }
        }
//................................................................
double abs(double n)  // нахождение модуля (с той же целью)
        {
        if(n<0){return -n;}else{return n;}
        }
//................................................................
class Setuation  // класс СЕТУАЦИЯ - массив сигналов рецепторов
{
public:
Setuation(int Rec=0) // конструхтор
        {
        Receptors=Rec;
        m=new int [Receptors];
        for(int i=0;i<Receptors;i++)
                {
                m[i]=0;
                }
        }
~Setuation(){delete [] m;} // деструхтор, ес хто не понял ;-)
int ItsLong() const {return Receptors;}  // количество рецепторов
int & operator()(int Num){return m[Num];} // возбуждение i-го рецептора
Setuation & operator=(Setuation &Sn) // присваивание сетуации
{
if(this != &Sn)
        {
        delete [] m;
        Receptors=Sn.ItsLong();
        m=new int [Receptors];
        for(int i=0;i<Receptors;i++)
                {
                m[i]=Sn(i);
                }
        }
return *this;
}
private:
int Receptors;
int *m;
};
 
//.................................................................
 
class Viborka   // обучающая выборка (сетуация + правильный отклик)
{
public:
Viborka(Setuation S, int Otk){Set=S;otklik=Otk;}
~Viborka(){}
int & Signal(int nomer){return Set(nomer);} //возбуждение i-го рецептора
int Otklik() const {return otklik;} //ожидаемый отклик
Setuation & S(){return Set;} //вся сетуация
private:
Setuation Set;
int otklik;
};
 
//.................................................................
 
class MozG  // массив коэффициентов проводимости
{
public:
MozG(int Rec) // девственно чистый мозг (все проводимости - 0)
        {
        c=new double [Rec];
        nc=Rec;
        for(int i=0;i<Rec;i++)
                {
                c[i]=0;
                }
        }
 
int Otklik(Setuation S)const //получение отклика
        {
        double Sum=0;
        for(int i=0;i<S.ItsLong();i++)
                {
                Sum+=S(i)*c[i];
                }
        return round(Sum);
        }
 
void Teaching(Viborka V, double Eps) //дообучение
        {
        if(abs(Otklik(V.S())-V.Otklik())<Eps)
                {
                long SigB=0;
                for(int i=0;i<V.S().ItsLong();i++)
                        {
                        SigB+=V.Signal(i)*V.Signal(i);
                        }
                for(int i=0;i<V.S().ItsLong();i++)
                        {
                        c[i]+=(Otklik(V.S())-V.Otklik())/SigB*V.Signal(i);
                        }
                }
        }
 
private:
int nc;
double *c;
};
а вот программа, играющая в крестики-нолики с возможностью дообучения по этому алгоритму.
Вложения
Тип файла: rar XO.rar (704.3 Кб, 109 просмотров)
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2009, 20:57
Помогаю со студенческими работами здесь

Сколько нейронов должно быть на входном и выходном слое?
Пытался реализовать простую нейросеть, возникли некоторые трудности: 1. Сколько нейронов должно быть на входном и выходном слое? К...

Нейронные сети - что это?
сколько гуглил - ничего путного не нашел. 1 - нейронная сеть эт че? (приблизительно понимаю но не доконца) 2 - на практике такое...

Свёрточные нейронные сети
Здравствуйте, уважаемые форумчане. Помогите пожалуйста разобраться с архитектурой свёрточных нейронных сетей в задаче распознавания...

Нейронные сети. Основы
Изучаю нейронные сети по книге Осовского (учебники на английском брать не решилась - слишком сложная тема). И уже в самом начале...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru