Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C/C++ Не знаю как справится с подобной задачей по С++ https://www.cyberforum.ru/ c-cpp/ thread3019029.html
1. Разработайте и реализуйте класс Square, который может хранить информацию о квадратном выражении o. переменная имеет вид: ax2+bx+c, где числа a, b, c (коэффициенты) — частные члены класса, а x — переменная уравнения. Конструктор с 3-мя параметрами класса будет иметь в качестве аргументов числа a, b, c и для конструктора по умолчанию эти значения принимают размер 0. Также будет предоставлен...
C/C++ Небольшой язык программирования
Этот язык программирования довольно простой, немного похож на ассемблер и является интерпретируемым. Но функции я решил пока не реализовывать. Там будет 16 регистров, поделённых на 4 группы (целочисленные, логические, с плавающей запятой и строковые). Также я решил там использовать map с указателями на функции (чтобы было проще добавлять функции). #include <iostream> #include <fstream>...
C/C++ Ключи RSA и шифрование Доброе время суток. Прошу помочь разобраться с ключами RSA (как я понял). Пришел на новое место работы стажером. Дали задание обновить программу, где используется шифрование. Решил заодно, как я понял, обновить ключи или что-то типа того на новые. Не могу понять как это сделать. Вот кусок кода где указан ключ: STATIC BYTE PublicKey =... https://www.cyberforum.ru/ c-cpp/ thread3016894.html C/C++ Проблема с библиотеками C++ Здравствуйте, надеюсь тема там где должна быть. У меня случилась проблема мне нужно было установить XNA 3.1 Он не устанавливался по причине (An error occurred during the installation of assembly "Microsoft.VC90..."). Погуглив я увидел что это может быть связанно с неправильными или поврежденными библиотеками С++, после чего я решил их переустановить. Удалил через удаление программ все... https://www.cyberforum.ru/ c-cpp/ thread3016872.html
C/C++ Тернарные операторы и ветвления
Здравствуйте. Подскажите пожалуйста, вот например у меня есть функция, которую можно описать двумя способами: ветвление или с применением тернарных операторов(функция в вложении). Вот код с использованием ветвления: if(x<a1){ y=1; }else if(x<=a1||x<a2){ y=2; }else if(x<=a2||x<a3){ y=3;
C/C++ Можно ли написать новый стандарт языка или интерпретатор для C++ Вопрос выглядит очень глупым, но всё же. Если написать интерпретатор для C++, то что получится? Хоть язык большой, мощный и сложный, но думаю можно попробовать написать мелкий интерпретатор для C++. Может это будут расширенные возможности для отладки кода. Или ещё лучше: Написать свой стандарт C++, отличающийся от самого C++ (Но тогда будет ли это C++?). Можно будет добавить создание своих... https://www.cyberforum.ru/ c-cpp/ thread3016472.html
C/C++ Не находятся файлы при линковке в clang https://www.cyberforum.ru/ c-cpp/ thread3016275.html
Решил попробовать библиотеку POCO, собрал в статику последнюю версию poco-1.12.2-all (zip архив из релиза) со статичным openssl, все с динамичным рантаймом (md). Собирал через cmake на последнем студийном компиляторе (MSBuild version 17.3.1, если что не комьюнити, а именно тулзы). После сборки создал проект (CMake проект в последней CLion 2022.2.1). CMakeLists.txt...
Можно ли ускорить заполнение файла случайными байтами C/C++
Есть у меня функция, которая заполняет бинарный файл случайными байтами. Она работает так, как и задумывалось но очень медленно. Мне нужно, чтобы эта функция создавала файл размером в пару гигабайт за несколько секунд. Как её лучше переделать? string generateKeyFile(string name, unsigned int length) { ofstream file(name+"_K.bin", ios::binary); char* data = new char; ...
C/C++ Telegram File Есть у кого сурс,чтобы отправлял файл ,который указал с сообщением в тг ? https://www.cyberforum.ru/ c-cpp/ thread3016038.html C/C++ Ошибка cannot convert ‘<brace-enclosed initializer list>’ https://www.cyberforum.ru/ c-cpp/ thread3015797.html
здравствуйте, имею проблему в следующем коде: // Once a full message is received, add it to the incoming queue void AddToIncomingMessageQueue() { // Shove it in queue, converting it to an "owned message", by initialising // with the a shared pointer from this connection object if(typeOwn_ == type_owner::_server) m_qMessagesIn.push_back({...
C/C++ Имитация последовательного порта
Имеется программа, которая читает данные с последовательного порта из некоторого устройства. Так как это устройство не всегда доступно, возникла необходимость имитировать принятие этих данных. ТО есть, создать буфер типа sstream, чтобы записать в него например, "test datas from device" затем по частям вычитывать. В общем, задача не сложная, но возможно есть уже готовые решения? ...
C/C++ Сетевая структура Бродяги симпатяги, помогите пожалуйста с заданием... Уже бьюсь 3 день и в голову не лезут мысли как сделать это( Если коротко, то нужно реализовать сетевую структуру, а в интернете на эту тему нема( Если у кого нить есть код или проект скиньте пожалуйста. Заранее благодарен
0 / 0 / 0
Регистрация: 06.10.2020
Сообщений: 27
0

Обучение сети персептронов для решения xor проблемы - C/C++ - Ответ 16441996

09.09.2022, 18:29. Показов 943. Ответов 4
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, я реализовал класс Perceptron. Создал первый слой из 3 персептронов и второй слой из 1 персептрона. Когда запускаю обучение, сеть изменяется (ее веса изменяются), но на выходе она дает вообще другой результат, не который нужен мне. Подскажите, пожалуйста, в чем проблема?
perceptron - реализация класса, main - обучение

perceptron.h
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
#pragma once
#include <vector>
#include <cmath>
#include <ctime>
class Perceptron {
private:
    std::vector<double> weights; //веса персептрона
    double learning_rate; //скорость обучения
    double output; //последнее выходное значение
    double local_derivative; //локальный градиент
public:
    //конструктор по умолчанию
    Perceptron(int w_number, double l_r = 0.1) {
        srand(time(NULL));
        this->learning_rate = l_r;
        for (int i = 0; i < w_number; i++) {
            this->weights.push_back(-0.5 + (double)rand() / RAND_MAX); //записываем случайное число от -0.5 до 0.5
        }
    }
    double activate(std::vector<double> input);
    double predict(std::vector<double> input);
    std::vector<double>get_weights();
    void set_weights(std::vector<double> weights);
    void learn(std::vector<double> input, double error);
    //void learn(std::vector<double> input, double loc_der);
    std::vector<double> get_local_derivatives();
};


perceptron.cpp
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
#include "perceptron.h"
 
double func(double x) {
    return 1. / (1. + exp(x));
}
 
double derivative(double x) {
    double y = func(x);
    return y * (1. - y);
}
//производная f(x)(1-f(x))
 
 
 
//функция активации
double Perceptron::activate(std::vector<double> input) {
    double out = 0;
    int size = this->weights.size();
    for (int i = 0; i < size; i++) {
        out += input[i] * this->weights[i];
    }
    return out;
}
 
//логистическая функция предсказания 
double Perceptron::predict(std::vector<double> input) {
    double out = this->activate(input);
    out = func(out);
    this->output = out;
    return out;
}
 
 
//обучение (изменение весов) на основе ошибки и входных данных
void Perceptron::learn(std::vector<double> input, double error) {
    this->local_derivative = error * derivative(this->output);
    int size = this->weights.size();
    for (int i = 0; i < size; i++) {
        this->weights[i] -= this->learning_rate * this->local_derivative * input[i];
    }
     
}
 
//получить локальные градиенты
std::vector<double> Perceptron::get_local_derivatives() {
    std::vector<double> loc_der;
    int size = this->weights.size();
    for (int i = 0; i < size; i++) {
        loc_der.push_back(this->weights[i] * this->local_derivative);
    }
    return loc_der;
}
 
 
//получить веса
std::vector<double> Perceptron::get_weights() {
    return this->weights;
}
 
 
//установить веса
void Perceptron::set_weights(std::vector<double> weights) {
    this->weights = weights;
}

main.cpp
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
#include <iostream>
#include "perceptron.h"
 
using namespace std;
 
int main() {
    setlocale(LC_ALL, "rus");
    //таблица истинности
    //исключающее или из 2 входов
    
    vector<vector<double>> inputs(4);
    inputs[0] = { 0,0 };
    inputs[1] = { 0,1 };
    inputs[2] = { 1,0 };
    inputs[3] = { 1,1 };
 
    vector<double> answers(4, 0);
    answers[1] = answers[2] = 1;
 
    int N_1 = 3;
    srand(time(NULL));
    vector<Perceptron> first_layer(N_1, Perceptron(2));
    for (int i = 0; i < N_1; i++) {
        vector<double> weights(2);
        for (int j = 0; j < 2; j++) {
            weights[j] = -0.5 + (double)rand() / RAND_MAX;
        }
        first_layer[i].set_weights(weights);
    }
 
    //последний персептрон имеет 3 входа
    Perceptron last_layer = Perceptron(N_1);
 
 
    cout << "Веса сети" << endl;
    for (int i = 0; i < N_1; i++) {
        cout << "Веса нейрона №" << i << endl;
        vector<double> weights = first_layer[i].get_weights();
        for (int j = 0; j < 2; j++) {
            cout << weights[j] << ' ';
        }
        cout << endl;
    }
    cout << "Веса выходного нейрона" << endl;
 
    vector<double> weights = last_layer.get_weights();
    for (int j = 0; j < 2; j++) {
        cout << weights[j] << ' ';
    }
    cout << endl;
 
    //начинаем обучение
    //первая итерация
    //прямое распространение
    for (int i = 0; i < 1000; i++) {
        for (int j = 0; j < 4; j++) {
 
            vector<double> out_first_layer;
            for (int i = 0; i < N_1; i++) {
                out_first_layer.push_back(first_layer[i].predict(inputs[j]));
            }
            double output = last_layer.predict(out_first_layer);
            double error = output - answers[j];
            cout << " Ответ сети: " << output << " Нужный ответ " << answers[j] << " итерация №" << i * 4 + j << endl;
 
            //обратное распространение
            last_layer.learn(out_first_layer, error);
            vector<double> loc_der = last_layer.get_local_derivatives();
            for (int i = 0; i < N_1; i++) {
                first_layer[i].learn(inputs[j], loc_der[i]);
            }
        }
    }
    
 
    cout << "Веса сети" << endl;
    for (int i = 0; i < N_1; i++) {
        cout << "Веса нейрона №" << i << endl;
        vector<double> weights = first_layer[i].get_weights();
        for (int j = 0; j < 2; j++) {
            cout << weights[j] << ' ';
        }
        cout << endl;
    }
    cout << "Веса выходного нейрона" << endl;
 
    weights = last_layer.get_weights();
    for (int j = 0; j < 2; j++) {
        cout << weights[j] << ' ';
    }
    cout << endl;
    
    return 0;
}


Вернуться к обсуждению:
Обучение сети персептронов для решения xor проблемы C/C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2022, 18:29
Готовые ответы и решения:

Обучение двухслойного персептрона для решения XOR задачи исползуя дельта правило
Здравстуйте, возникла такая проблема при изучении персептронов: сеть обучается только при удачном...

Нейронные сети для решение задачи XOR
У меня есть exe файл, прикрепленный ниже. Пожалуйста помогите найти его исходник на делфи. Мне...

Подбор данных для обучение нейронный сети
Решил немного заняться нейронными сетями, попробовал написать XOR, затем с sin попробовал. В...

Обучение и применение нейронной сети для прохождения игры
я написал Flappy Bird на HTML5 теперь хочу сделать простенькую нейронную сеть на JS... (движется...

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

4
09.09.2022, 18:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2022, 18:29
Помогаю со студенческими работами здесь

Проблемы с XOR и двоичный кодом
Доброго времени суток, есть задание &quot;Хэширование сообщения по стандарту МККТТ Х.509&quot; и программа...

Подскажите библиотеку/способ для решения проблемы
from time import sleep smbls = 'qwerty' indx = 0 for x in range(1000): print(f'----&gt;...

Весовые коэффициенты в нейронной сети XOR
Здравствуйте. Стоит задача написать нейронную сеть для реализации XOR(см. Приложение). net =...

Нейронные сети. Решение XOR задачи на C#
Всем доброго времени суток! Вот начал изучать нейронные сети, и решил начать с XOR-задачи(сумма по...

Нужны искушённые добровольцы для решения серьёзной проблемы государственной важности
Добрый день. Есть одна центральноевропейская страна, в которой власти упорно скрывают реальную...

Какие технологии предложите для решения проблемы создания приложения путеводителя?
Допустим, есть магазин, нужно создать приложение с отображением карты магазина и поиска товаров на...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru