• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

prosty pojedynczy neuron w c++

Object Storage Arubacloud
0 głosów
5,184 wizyt
pytanie zadane 15 lipca 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

hej ,ostatnio zainteresowałem się sztucznymi sieciami neuronalnymi :) wiem  że to dość skomplikowany temat i znając tylko "podstawy podstaw w c++" lepiej się za to nie brać ... na razie oczywiście nie biorę się za takie rzeczy jak wsteczna propagacja błędów czy sieć rekurencyjna . Miałem na celu napisać symulator działania prostego pojedynczego neuronu . Zastosowałem wagi ,sumator ,oraz funkcje aktywacji neuronu . Poza tym w programiku możemy tworzyć nowe synapsy i dendryty oraz nadawać im wartości . Co wy o nim sądzicie ? ,program nie jest w 100% mojego pomysłu bo kod sztucznego neuronu znalazłem w Javie - http://patrykkobielak.pl/java-sztuczny-neuron/ .Program jednak zmodyfikowałem i dodałem symulator . Jeżeli neuron zapisałem poprawnie to mam kilka pytań ...

1) Czy tworząc nowy neuron muszę też napisać nową klasę czy bardziej będzie to polegać na metodach prędzej rekurencyjnych czy zmienianiu wartości konstruktora itd ...

2) Czy poprawnie zastosowałem wzór na funkcje aktywacyjną unipolarną

3) Po co przenosić sumę potencjału membranowego na funkcje i wyliczać ostateczną wartość ?

 

Pod spodem podałem kod programu ,będę wdzięczy za jego ocenę i rady ,pozdrawiam :)

 

#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <cstdlib>

using namespace std;

/// KLASA NEURONU ///

class Neurone
{
private:
    vector<double>dendrites; //WEJŚCIA
    vector<double>synapses; //WAGI
public:

    void create_elements(int n) //TWORZYMY ZADANĄ LICZBĘ WAG I WEJŚĆ Z POCZĄTKOWĄ WARTOŚCIĄ 0
    {
        for(int i=0; i<n; i++)
        {
            dendrites.push_back(0);
            synapses.push_back(0);
        }
    }

    void create_new_element_of_dendrites() //TWORZENIE NOWEGO DENDRYTU DO SYMULATORA
    {
        dendrites.push_back(0);
    }
    void create_new_element_of_synapses() //TWORZENIE NOWEJ SYNAPSY DO SYMULATORA
    {
        synapses.push_back(0);
    }

    double membranePotential(double membrane_potential) //ZWRACA POTENCIAŁ MEMBRANOWY
    {
        return membrane_potential;
    }

    int input_size() //ZWRACA ILOŚĆ DENDRYT(WEJŚĆ DO NEURONU)
    {
        return dendrites.size();
    }

    double get_input(int index) //ZWRACA WARTOŚĆ WYBRANEGO NUMERU WEJŚCIA
    {
        return dendrites[index];
    }
    void set_input(int index, double value) //USTAWIA WARTOŚĆ WYBRANEGO NUMERU WEJŚCIA
    {
        dendrites[index]=value;
    }
    double get_synapses(int index) //ZWRACA WARTOŚĆ WYBRANEJ WAGI
    {
        return  synapses[index];
    }
    void set_synapses(int index, double value) //USTAWIA WARTOŚĆ WYBRANEJ WAGI
    {
        synapses[index]=value;
    }

    double processCell(int index) //MNOŻENIE ODPOWIEDNIEJ DENDRYTY PRZES ODPOWIADAJĄCĄ JEJ WAGĘ
    {
        return dendrites[index]*synapses[index];
    }

    double getMembranePotential() //OBLICZANIE SUMY MEMBRANOWEJ
    {
        if(input_size()==0) //JEŚLI WEJŚCIA NIE ISTNIEJĄ
            return -1;
        else
        {
            double sum=0;

            for(int i=0; i<input_size(); i++)
            {
                sum+=processCell(i);
            }
            return sum;
        }
    }

    long double power(int p) //POTĘGOWANIE NIEZBĘDNE DO WLICZNIA FUNKCJI AKTYWACJI UNIPOLARNEJ
    {
        const double w = getMembranePotential();
        double n = 1;

        for(int i=0; i<w; i++)
        {
            n*=p;
        }

        long double x = getMembranePotential()/n; //BO POTENGUJEMY PRZEZ -5 WIĘDZ DZIELIMY

        return x;


    }

    double function_use() //FUNKCJA AKTYWACJI
    {
        if(input_size()==0) //JEŚLI WEJŚCIA NIE ISTNIEJĄ
            return -1;

        else
        {
            float e = 2.71; //WARTOŚĆ LOGARYTMU
            float f = (1/(1+(power(e)))); //AKTYWACJA UNIPOLARNA
            return f;
        }
    }


};

/// KONIEC KLASY NEURONU ///

Neurone neurone;

void get_information()
{
    double value_of_neurone = neurone.function_use();

    for(int i=0; i<neurone.input_size(); i++)
    {
        cout<<i+1<<" input :   dendrites = "<<neurone.get_input(i)<<" synapses = "<<neurone.get_synapses(i)<<endl;
    }

    cout<<endl;
    cout<<"NEURONE OUTPUT = "<<neurone.function_use()<<endl;
    cout<<"DENDRITES POTENTIAL OUTPUT  = "<<neurone.getMembranePotential()<<endl;
    cout<<endl<<endl;
}

int main()
{

    cout<<"---NEURAL CELL---"<<endl;
    getch();

    while(true)
    {
        system("cls");

        get_information();

        cout<<"             ---MENU---       "<<endl<<endl;
        cout<<"1) create new dendrites and synapses"<<endl;
        cout<<"2) change dendrites value           "<<endl;
        cout<<"3) change synapses value            "<<endl;
        cout<<"4) exit                             "<<endl;

        char z = getch();

        switch(z)
        {
        case '1':
        {
            neurone.create_new_element_of_dendrites();
            neurone.create_new_element_of_synapses();
        }
        break;
        case '2':
        {
            cout<<endl;
            int index;
            double value;
            cout<<"enter the dendrites (input) value : ";
            cin>>value;
            cout<<"enter the dendrites (input) index : ";
            cin>>index;
            neurone.set_input(index-1,value);
        }
        break;
        case '3':
        {
            cout<<endl;
            int index;
            double value;
            cout<<"enter the synapses value : ";
            cin>>value;
            cout<<"enter the synapses index : ";
            cin>>index;
            neurone.set_synapses(index-1,value);
        }
        break;
        case '4':
        {
            exit(0);
        }
        break;
        }


    }

    return 0;
}

 

1
komentarz 15 lipca 2017 przez jpacanowski VIP (101,940 p.)

ostatnio zainteresowałem się sztucznymi sieciami neuronalnymi :)

Neuronowymi... ;)

znając tylko "podstawy podstaw w c++" lepiej się za to nie brać

Podstawy języka do takich rzeczy wystarczą. Co innego, jeśli chcesz napisać kod w Advanced OOP.

class Neurone

Po angielsku pisze się neuron...

komentarz 15 lipca 2017 przez Jakub 0 Pasjonat (23,120 p.)
głupie błędy w nazewnictwie ... dzięki za zwrócenie uwagi :)
1
komentarz 18 lipca 2017 przez jpacanowski VIP (101,940 p.)
Może odśwież temat jak co, to ktoś odpowie :)

1 odpowiedź

0 głosów
odpowiedź 18 lipca 2017 przez NaviFox Dyskutant (8,950 p.)
wybrane 18 lipca 2017 przez Jakub 0

Podobne pytania

+1 głos
0 odpowiedzi 509 wizyt
pytanie zadane 4 kwietnia 2017 w C i C++ przez dichloroetylobenzen Użytkownik (850 p.)
0 głosów
2 odpowiedzi 672 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...