Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Как создать библиотеку классов в C++ http://www.cyberforum.ru/cpp-beginners/thread526246.html
Подскажите, пожалуйста, как создать библиотеку классов на C++. Необходимо создать библиотеку, которую можно будет потом использовать при написании другой программы. Правильно ли я понимаю, что после того, как создается такая библиотека, то исходный код методов класса, описанного в этой библиотеке не будет доступен тому, кто будет ее использовать? Можно будет только дать заголовочный файл и...
C++ Создать файл, содержащий информацию о студентах Создать файл, содержащий информацию о студентах, которые прибыли в лагерь. Структура записи: - Фамилия, - Номер отряда, - Наименование факультета. Распечатать список по номерам отрядов, начиная с наименьшего номера и заканчивая самым большим. Вывести информацию о конкретного студента X. Количество отрядов> 5, X вводится с клавиатуры. очень надо к курсачу програма. на Borland C... http://www.cyberforum.ru/cpp-beginners/thread526234.html
Скорость движения авто C++/CLI WinForms
Как на visual stidio 2010 написать такую програмку, известны данные: скорость движения и время. нужно найти расстояние которое он прошел. допустим время и скорость вводим в textbox1 а скорость в textbox2 и при нажатии кнопки подсчитать результат и вывести в метку. Я вот тут сделал код но он не работает: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {...
запись в файл и чтение из файла C++
Всем привет. Кто может подсказать решение? Есть полученный заполненный массив. int A. Числа в нём от 0 до 17. Как его записать в файл ? И как потом в другой программе этот файл открыть и прочитать из него, записав все данные числа в массив int B ?
C++ Задача с факториалами. http://www.cyberforum.ru/cpp-beginners/thread526207.html
Есть задачи, помогите додумать пожалуйста. #include <iostream> #include <cmath> #include <cstdlib> using namespace std; main()
C++ массив Здравствуйте. Если кто то не занят, помогите пожалуйста разобраться с такой задачей "Дан массив. Напечатать все элементы, не превышающие числа 100" программа на С заранее спасибо подробнее

Показать сообщение отдельно
Duha666
50 / 50 / 5
Регистрация: 10.03.2012
Сообщений: 138
23.03.2012, 14:12     Многослойный перспетрон
Пытаюсь написать простейший персептрон для решения хотя бы 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");
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru