Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

prosty pojedynczy neuron w c++

$
0
0

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;
}

 


Viewing all articles
Browse latest Browse all 21942

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra