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
|