Neomezené množství objektů (neuronová síť)   zodpovězená otázka

VB.NET, Algoritmy

Chtěl bych si naprogramovat neuronovou síť. Každá neuronová síť se skládá z neuronů. V mém případě budu mít matematický model neuronu zvaný perceptron. Ten už jsem si zvládl nějak nendrtálský naprogramovat. ( http://zz912.blog.cz/1003/perceptron ) .

Momentálně bych si chtěl napsat celou síť a zároveň se na tom naučit objektově programovat. Zatím jsem si napsal třídu neuron

Public Class Neuron
    'nastaveni vlastnosti
    Private _vstup As Array
    Public WriteOnly Property vstup() As Array
        Set(ByVal value As Array)
            _vstup = value
        End Set
    End Property

    Private _vaha As Array
    Public WriteOnly Property vaha() As Array
        Set(ByVal value As Array)
            _vaha = value
        End Set
    End Property

    Private _bias As Decimal
    Public WriteOnly Property bias() As Decimal
        Set(ByVal value As Decimal)
            _bias = value
        End Set
    End Property



    Public _vystup As Integer
    Public Property vystup() As Integer
        Get
            Vypocet()
            Return _vystup
        End Get
        Set(ByVal value As Integer)

        End Set
    End Property


    Public Sub Vypocet()
        Dim z As Decimal

        For i As Integer = 0 To _vaha.Length - 1
            z = z + _vaha(i) * _vstup(i)
        Next
        z = z + _bias

        _vystup = sign(z)
    End Sub

    Public Function sign(ByVal z As Decimal)
        If z > 0 Then
            Return 1
        Else
            Return 0
        End If
    End Function

End Class

Tato třída mi funguje tak jak má a tak jsem si vyvořil i zkušební síť, která se umí chovat jako funkce XOR.

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SitXor.Click
        ' neuron 1_1
        Dim vstup1(1) As Integer
        vstup1(0) = 1
        vstup1(1) = 1

        Dim vaha1_1(1) As Decimal
        vaha1_1(0) = -1
        vaha1_1(1) = -1

        Dim bias1_1 As Decimal = 1.5

        Dim neuron1_1 As New Neuron
        neuron1_1.vstup = vstup1
        neuron1_1.vaha = vaha1_1
        neuron1_1.bias = bias1_1

        Dim vystup1_1 As Integer = neuron1_1.vystup

        ' neuron 2_1
        Dim vaha2_1(1) As Decimal
        vaha2_1(0) = 1
        vaha2_1(1) = 1

        Dim bias2_1 As Decimal = -0.5

        Dim neuron2_1 As New Neuron
        neuron2_1.vstup = vstup1
        neuron2_1.vaha = vaha2_1
        neuron2_1.bias = bias2_1

        Dim vystup2_1 As Integer = neuron2_1.vystup

        ' neuron 1_2
        Dim vstup2(1) As Integer
        vstup2(0) = vystup1_1
        vstup2(1) = vystup2_1

        Dim vaha1_2(1) As Decimal
        vaha1_2(0) = 1
        vaha1_2(1) = 1

        Dim bias1_2 As Decimal = -1.5

        Dim neuron1_2 As New Neuron
        neuron1_2.vstup = vstup2
        neuron1_2.vaha = vaha1_2
        neuron1_2.bias = bias1_2

        Dim vystup1_2 As Integer = neuron1_2.vystup


        MsgBox(vystup1_2)

        End

    End Sub

Tato jednoduchá síť mi taky funguje. Bohužel co neumím vytvořit, je neomezená síť s n-prvky.

Když jsem zde na stránkách studoval objektové programování a byl zde probrán příklad se zaměstnancem. Tak se vytvořila třída Zaměstnanec. A pak se vytvořili pouze dva objekty:

Dim zam1 As New Zamestnanec

Dim zam2 As New Zamestnanec

A na nich se ukazuje jak se dál pracuje s těmito objekty. Já ve své síti dělám to samé.

Dim neuron1_1 As New Neuron
Dim neuron1_2 As New Neuron
Dim neuron2_1 As New Neuron
Dim neuron2_2 As New Neuron
.....
.....

Ovšem nevím jak to udělat, když budu chtít mít síť s n prvky v x vrstvách. Ten můj problém by se dal převést na to jak si udělat kartotéku s n zaměstnanci.

Vím že bych si mohl někde na netu stáhnout už nějakou předem naprogramovanou síť, ale chtěl bych si ji udělat sám, abych se přitom dokopal i k objektovému psaní. Pokud by se našel někdo, kdo by byl ochtoný mi projít ty dva zdrojáky které jsem zde uvedl, byl bych vděčný, kdyby zhodnotil, jestli na to jdu tou správnou cestou. Vím, že by se tato síť dala řešit tak, že bych měl místo třídy neuron funkci neuron a pak přes matici upravovat výsledky, ale všichni programátoři propagují objektové programování, tak bych si chtěl tuto síť napsat co nejčistějc.

Předem děkuji za odpověď

Zdeněk Z

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No nevím, ale co třeba zkusit pole nebo kolekci prvků typu Neuron ?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback