Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138

Многослойный перспетрон

23.03.2012, 14:12. Показов 5928. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь написать простейший персептрон для решения хотя бы XOR задачи, но не успешно. К сожалению, в сети кода не на пэхапэ не нашел, пришлось импровизировать. Но теперь не могу найти ошибку. Снабдил код комментариями, да бы не было проблем взаимопонимания:
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
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
const int input_size = 2, hidden_size = 3 , output_size = 1; // размеры соответственных слоев
const int sz = input_size + hidden_size + output_size; // итоговый размер матриц
const double a = 0.5; // коэффициент инерциальности
 
int x[input_size], y[output_size]; // входной вектор и ответ учителя
 
double o[sz], d[sz], w[sz][sz], delta_w[sz][sz];
double v = 1;
 
double f(double x) // активационная функция
{
    return x / (abs(x) + 0.2);
}
 
void Initialize()
{
    for (int i = 0; i < input_size; i++) // инициализация весов между входным и скрытым слоями
        for (int j = input_size; j < input_size + hidden_size; j++)
            w[i][j] = 1.0 * (rand() % 2 * 2 - 1) / (rand() % 10 + 1); // 1* (1 или -1) * (1..10);
    for (int i = input_size; i < input_size + hidden_size; i++) // инициализация весом между скрытым и выходным слоями
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
            w[i][j] = 1.0 * (rand() % 2 * 2 - 1) / (rand() % 10 + 1);
}
 
void GetAnswer() // текущий ответ сети
{
    double tmp;
    for (int i = 0; i < input_size; i++)
        o[i] = x[i]; // получаем ответы входного слоя
    for (int i = input_size; i < input_size + hidden_size; i++) // получаем ответ для каждого нейрона из скрытого слоя
    {
        tmp = 0;
        for (int j = 0; j < input_size; j++)
            tmp += o[j] * w[j][i];
        o[i] = f(tmp);
    }
    for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++) // получаем ответ для каждого нейрона выходного слоя
    {
        tmp = 0;
        for (int j = input_size; j < input_size + hidden_size; j++)
            tmp += o[j] * w[j][i];
        o[i] = f(tmp);
    }
}
 
void BackPropagation() // обратное распределение ошибки
{
    double tmp;
    for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++)
        d[i] = o[i] * (1 - o[i]) * (y[i - input_size - hidden_size] - o[i]);
    for (int i = input_size; i < input_size + hidden_size; i++)
    {
        tmp = 0;
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
            tmp += d[j] * w[i][j];
        d[i] = o[i] * (1 - o[i]) * tmp;
    }
    for (int i = 0; i < input_size; i++)
    {
        tmp = 0;
        for (int j = input_size; j < input_size + hidden_size; j++)
            tmp += d[j] * w[i][j];
        d[i] = o[i] * (1 - o[i]) * tmp;
    }
    for (int i = 0; i < input_size; i++) // пересчет дельты ребер между входным и скрытым слоями
        for (int j = input_size; j < input_size + hidden_size; j++)
        {
            delta_w[i][j] = a * delta_w[i][j] + (1 - a) * v * d[j] * o[i];
            w[i][j] += delta_w[i][j];
        }
    for (int i = input_size; i < input_size + hidden_size; i++) // пересчет дельты ребер между скрытым и выходным слоями
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
        {
            delta_w[i][j] = a * delta_w[i][j] + (1 - a) * v * d[j] * o[i];
            w[i][j] += delta_w[i][j];
        }
    v *= 0.99; // уменьшаем коффициент обучения
}
 
int main()
{
    srand(time(NULL));
    Initialize(); // инициализируем начальные веса
    while (true)
    {
        printf("Input:\n");
        for (int i = 0; i < input_size; i++) // получаем входной вектор
            scanf("%d", &x[i]);
        GetAnswer(); // подсчитываем ответ
        printf("Maybe: ");
        for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++)
            printf("%d ", (int)(o[i] + 0.5)); // выводим ответ уже по пороговой функции
        printf("\nWhat is the right answer?\n");
        for (int i = 0; i < output_size; i++) // получаем ответ учителя и
            scanf("%d", &y[i]);
        for (int i = 0; i < 100; i++) // корректируем веса
        {
            GetAnswer();
            BackPropagation();
        }
        printf("\n\n");
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2012, 14:12
Ответы с готовыми решениями:

Прогнозирование, используя многослойный персептрон, как?
подскажите, что почитать, посмотреть, чтобы иметь возможность написать программу, которая решает следующую задачу: разработать многослойный...

многослойный персептрон
как на писать на языке делфи многослойный персептрон?

Многослойный персептрон
Хочу использовать matlab для моделирования нейронных сетей, правда никогда в нем не работала. Поэтому возник вопрос, возможно ли в matlab...

14
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
23.03.2012, 19:28
Duha666, сейчас сложно разобраться в коде, но заметил у вас
C++
1
2
3
4
double f(double x) // активационная функция
{
    return x / (abs(x) + 0.2);
}
почему бы не воспользоваться сигмоидальной функцией?

и посмотрите в каком-нибудь источники про проблемы алгоритма обратного распределения ошибки. Возможно в коде упущен момент с преждевременной сходимостью. По каким критериям выбирается начальное значение? Осуществляется ли перезапуск? и т.п.
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
24.03.2012, 03:48  [ТС]
Это тоже сигмоидальная функция. Правда, потом вернул на 1/(1+ exp(-x)). Проблема в том, что веса после нескольких нескольких итераций уменьшаются на крайне малое значение.

Начальные веса беру случайно у нуля. Во время работы алгоритма больше не меняю их
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
24.03.2012, 03:55
Цитата Сообщение от Duha666 Посмотреть сообщение
Это тоже сигмоидальная функция. Правда, потом вернул на 1/(1+ exp(-x)). Проблема в том, что веса после нескольких нескольких итераций уменьшаются на крайне малое значение.

Начальные веса беру случайно у нуля. Во время работы алгоритма больше не меняю их
Чтобы сеть не вырождалась, надо постоянно чередовать обучающие примеры.
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
24.03.2012, 04:09  [ТС]
Nekto, естественно. Так и происходит. Но добиться правильного ответа невозможно даже по единственному примеру.
Цитата Сообщение от Duha666 Посмотреть сообщение
веса после нескольких нескольких итераций уменьшаются на крайне малое значение.
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
24.03.2012, 04:21
Цитата Сообщение от Duha666 Посмотреть сообщение
Nekto, естественно. Так и происходит. Но добиться правильного ответа невозможно даже по единственному примеру.
https://sites.google.com/site/... ects=0&d=1 вот писал как-то (полтора года назад) методом тыка, вроде работало. Уже детали не особо помню
1
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
24.03.2012, 15:55  [ТС]
Честно говоря, не увидел различий в обучении/получении ответа.
0
2619 / 1630 / 266
Регистрация: 19.02.2010
Сообщений: 4,326
24.03.2012, 22:31
Duha666, веса в интервале [-10,10] - это перебор (насыщение нейронов).
Сигмоида 1/(1+ exp(-x)) тоже мастдай.
Шаг обучения скорее всего на порядки завышен.
В код внимательно не вглядывался - поэтому не все проблемные места мог назвать.
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
26.03.2012, 04:38  [ТС]
Веса в интервале [-1, 1]. Было много вариантов а-ля [-0.1..0.1] и так далее. Но дело не в этом, проблема в необучаемости сети.
По каким причинам сигмоида 1/(1+ exp(-x)) плоха? В таком случае, какую лучше использовать? Шаг обучения изначально 1, далее умножается на 0.99.
0
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
28.03.2012, 13:57
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Сигмоида 1/(1+ exp(-x)) тоже мастдай.
А что в ней не так?

Цитата Сообщение от Duha666 Посмотреть сообщение
По каким причинам сигмоида 1/(1+ exp(-x)) плоха?
Тоже стало интересно. Помню когда учили, считали чуть ли не самой крутой активационной функцией?!
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
29.03.2012, 15:30  [ТС]
Вообщем, всяко развлекался с начальными весами, активационными функциями и ничего. Очевидно, где-то баг. Но найти не могу. Может быть все-таки есть у кого идеи?
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
29.03.2012, 16:29
смог добиться от твоей системы такого
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Input:
0
0
Maybe: 0.024326 v=1.000000
 
Input:
1
1
Maybe: 0.027209 v=1.000000
 
Input:
0
1
Maybe: 0.979380 v=1.000000
 
Input:
1
0
Maybe: 0.982667 v=1.000000
Добавлено через 1 минуту
hidden_size поставил 6, функцию активации 1 / (1 + exp(-x));
const double a = 0.1;
v поставил, чтоб не менялось
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        for (int i = 0; i < 1000; i++) // êîððåêòèðóåì âåñà
        {
            x[0]=0;
            x[1]=0;
            y[0]=0;
            GetAnswer();
            BackPropagation();
            x[0]=0;
            x[1]=1;
            y[0]=1;
            GetAnswer();
            BackPropagation();
            x[0]=1;
            x[1]=0;
            y[0]=1;
            GetAnswer();
            BackPropagation();
            x[0]=1;
            x[1]=1;
            y[0]=0;
            GetAnswer();
            BackPropagation();
        }
Добавлено через 1 минуту
и +убрал отрицательные веса связей.
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
29.03.2012, 16:38  [ТС]
Оу, каким образом? Сделал ровно то же самое, но результат все-ещё не меняется.
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
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
const int input_size = 2, hidden_size = 6 , output_size = 1; // размеры соответственных слоев
const int sz = input_size + hidden_size + output_size; // итоговый размер матриц
const double a = 0.1; // коэффициент инерциальности
 
int x[input_size], y[output_size]; // входной вектор и ответ учителя
 
double o[sz], d[sz], w[sz][sz], delta_w[sz][sz];
double v = 1;
 
double f(double x) // активационная функция
{
    return 1 / (1 + exp(-x));
}
 
void Initialize()
{
    for (int i = 0; i < input_size; i++) // инициализация весов между входным и скрытым слоями
        for (int j = input_size; j < input_size + hidden_size; j++)
            w[i][j] = 1.0 / (rand() % 10000 + 1);
    for (int i = input_size; i < input_size + hidden_size; i++) // инициализация весом между скрытым и выходным слоями
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
            w[i][j] = 1.0 / (rand() % 10000 + 1);
}
 
void GetAnswer() // текущий ответ сети
{
    double tmp;
    for (int i = 0; i < input_size; i++)
        o[i] = f(x[i]); // получаем ответы входного слоя
    for (int i = input_size; i < input_size + hidden_size; i++) // получаем ответ для каждого нейрона из скрытого слоя
    {
        tmp = 0;
        for (int j = 0; j < input_size; j++)
            tmp += o[j] * w[j][i]; // получаем входное значения нейрона
        o[i] = f(tmp); // возвращаем ответ по пороговой функции
    }
    for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++) // получаем ответ для каждого нейрона выходного слоя
    {
        tmp = 0;
        for (int j = input_size; j < input_size + hidden_size; j++)
            tmp += o[j] * w[j][i];
        o[i] = f(tmp);
    }
}
 
void BackPropagation() // обратное распределение ошибки
{
    double tmp;
    for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++)
        d[i] = o[i] * (1 - o[i]) * (y[i - input_size - hidden_size] - o[i]);
    for (int i = input_size; i < input_size + hidden_size; i++)
    {
        tmp = 0;
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
            tmp += d[j] * w[i][j];
        d[i] = o[i] * (1 - o[i]) * tmp;
    }
    for (int i = 0; i < input_size; i++) // пересчет дельты ребер между входным и скрытым слоями
        for (int j = input_size; j < input_size + hidden_size; j++)
        {
            //delta_w[i][j] = a * delta_w[i][j] + (1 - a) * v * d[j] * o[i];
            //w[i][j] += delta_w[i][j];
            w[i][j] += v * d[j] * o[i];
        }
    for (int i = input_size; i < input_size + hidden_size; i++) // пересчет дельты ребер между скрытым и выходным слоями
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
        {
            //delta_w[i][j] = a * delta_w[i][j] + (1 - a) * v * d[j] * o[i];
            //w[i][j] += delta_w[i][j];
            w[i][j] += v * d[j] * o[i];
        }
    //v *= 0.99; // уменьшаем коффициент обучения
}
 
 
void AutoLearn()
{
    x[0] = rand() % 2;
    x[1] = rand() % 2;
    y[0] = (x[0] ^ x[1]);
    GetAnswer();
    printf("%d %d - %0.2lf\n", x[0], x[1], o[input_size + hidden_size]);
    BackPropagation();
}
 
int main()
{
    srand(time(NULL));
    Initialize(); // инициализируем начальные веса
    while (true)
        AutoLearn();
}
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
29.03.2012, 17:50
Цитата Сообщение от Duha666 Посмотреть сообщение
Оу, каким образом? Сделал ровно то же самое, но результат все-ещё не меняется.
Запусти пару тысяч раз Autolearn без вывода, а потом проверь.
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
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
const int input_size = 2, hidden_size = 6 , output_size = 1; // ðàçìåðû ñîîòâåòñòâåííûõ ñëîåâ
const int sz = input_size + hidden_size + output_size; // èòîãîâûé ðàçìåð ìàòðèö
const double a = 0.1; // êîýôôèöèåíò èíåðöèàëüíîñòè
 
int x[input_size], y[output_size]; // âõîäíîé âåêòîð è îòâåò ó÷èòåëÿ
 
double o[sz], d[sz], w[sz][sz], delta_w[sz][sz];
double v = 1;
 
double f(double x) // àêòèâàöèîííàÿ ôóíêöèÿ
{
    return 1 / (1 + exp(-x));
}
 
void Initialize()
{
    for (int i = 0; i < input_size; i++) // èíèöèàëèçàöèÿ âåñîâ ìåæäó âõîäíûì è ñêðûòûì ñëîÿìè
        for (int j = input_size; j < input_size + hidden_size; j++)
            w[i][j] = 1.0 * (rand() % 2) / (rand() % 10 + 1); // 1* (1 èëè -1) * (1..10);
    for (int i = input_size; i < input_size + hidden_size; i++) // èíèöèàëèçàöèÿ âåñîì ìåæäó ñêðûòûì è âûõîäíûì ñëîÿìè
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
            w[i][j] = 1.0 * (rand() % 2) / (rand() % 10 + 1);
}
 
void GetAnswer() // òåêóùèé îòâåò ñåòè
{
    double tmp;
    for (int i = 0; i < input_size; i++)
        o[i] = x[i]; // ïîëó÷àåì îòâåòû âõîäíîãî ñëîÿ
    for (int i = input_size; i < input_size + hidden_size; i++) // ïîëó÷àåì îòâåò äëÿ êàæäîãî íåéðîíà èç ñêðûòîãî ñëîÿ
    {
        tmp = 0;
        for (int j = 0; j < input_size; j++)
            tmp += o[j] * w[j][i];
        o[i] = f(tmp);
    }
    for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++) // ïîëó÷àåì îòâåò äëÿ êàæäîãî íåéðîíà âûõîäíîãî ñëîÿ
    {
        tmp = 0;
        for (int j = input_size; j < input_size + hidden_size; j++)
            tmp += o[j] * w[j][i];
        o[i] = f(tmp);
    }
}
 
void BackPropagation() // îáðàòíîå ðàñïðåäåëåíèå îøèáêè
{
    double tmp;
    for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++)
        d[i] = o[i] * (1 - o[i]) * (y[i - input_size - hidden_size] - o[i]);
    for (int i = input_size; i < input_size + hidden_size; i++)
    {
        tmp = 0;
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
            tmp += d[j] * w[i][j];
        d[i] = o[i] * (1 - o[i]) * tmp;
    }
    for (int i = 0; i < input_size; i++)
    {
        tmp = 0;
        for (int j = input_size; j < input_size + hidden_size; j++)
            tmp += d[j] * w[i][j];
        d[i] = o[i] * (1 - o[i]) * tmp;
    }
    for (int i = 0; i < input_size; i++) // ïåðåñ÷åò äåëüòû ðåáåð ìåæäó âõîäíûì è ñêðûòûì ñëîÿìè
        for (int j = input_size; j < input_size + hidden_size; j++)
        {
            delta_w[i][j] = a * delta_w[i][j] + (1 - a) * v * d[j] * o[i];
            w[i][j] += delta_w[i][j];
        }
    for (int i = input_size; i < input_size + hidden_size; i++) // ïåðåñ÷åò äåëüòû ðåáåð ìåæäó ñêðûòûì è âûõîäíûì ñëîÿìè
        for (int j = input_size + hidden_size; j < input_size + hidden_size + output_size; j++)
        {
            delta_w[i][j] = a * delta_w[i][j] + (1 - a) * v * d[j] * o[i];
            w[i][j] += delta_w[i][j];
        }
    //v *= 0.99; // óìåíüøàåì êîôôèöèåíò îáó÷åíèÿ
}
 
int main()
{
    srand(time(NULL));
    Initialize(); // èíèöèàëèçèðóåì íà÷àëüíûå âåñà
    while (true)
    {
        printf("Input:\n");
        for (int i = 0; i < input_size; i++) // ïîëó÷àåì âõîäíîé âåêòîð
            scanf("%d", &x[i]);
        GetAnswer(); // ïîäñ÷èòûâàåì îòâåò
        printf("Maybe: ");
        for (int i = input_size + hidden_size; i < input_size + hidden_size + output_size; i++)
            printf("%f ", o[i]); // âûâîäèì îòâåò óæå ïî ïîðîãîâîé ôóíêöèè
        for (int i = 0; i < 1000; i++) // êîððåêòèðóåì âåñà
        {
            x[0]=0;
            x[1]=0;
            y[0]=0;
            GetAnswer();
            BackPropagation();
            x[0]=0;
            x[1]=1;
            y[0]=1;
            GetAnswer();
            BackPropagation();
            x[0]=1;
            x[1]=0;
            y[0]=1;
            GetAnswer();
            BackPropagation();
            x[0]=1;
            x[1]=1;
            y[0]=0;
            GetAnswer();
            BackPropagation();
        }
        printf("v=%f\n\n",v);
    }
}
Добавлено через 1 минуту
получается где-то после 4 тысяч уже близкие результаты
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
29.03.2012, 19:26  [ТС]
Ох ты, уже невероятный прогресс. Но вот что интересно. Почему-то обучение очень и очень скачкообразное. После 50к обучений они едва сдвинулись, но на 60 сразу получилось (0 0 - 0) (0 1 - 0.5) (1 0 - 0.5) (1 1 - 0). То есть всегда одно из значений (1, 0) (0, 1) оказывается в состоянии 0.5, а другое 1. На 100к то же самое, но на границе в 200к все становится идеально. Из-за чего так может происходить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2012, 19:26
Помогаю со студенческими работами здесь

Многослойный персептрон
Доброго времени суток, помогите пожалуйста реализовать многослойный персептрон, буду рад любым коментариям и пояснениям. Спасибо! Задача...

Многослойный параллакс эффект в вордпресс
Здравствуйте друзья! Умоляю о помощи! Я новичок в написании сайтов, изучаю своими силами что могу, что-то знаю, что то нет, не судите...

Многослойный персептрон. Функция активации
Доброго времени суток! Создаю однослойный персептрон с обратным распространением ошибки. Суть его работы, есть 28 входов (параметры...

Составной (многослойный) рисунок. Как сделать?
Доброго времени суток. Занялся я созданием своей ККИ (карточно коллекционная игра) и сейчас пишу &quot;конструктор&quot; карт к ней,...

Многослойный персептрон обучить генетическим алгоритмом
Помогите в разработке кода. Нужно Многослойный персептрон обучить с помощью генетического алгоритма. На входе вектора значений на выходе n...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru