Emiliano published a copy on his GitHub but no longer for VB.NET. Here's the C# version, proposed as a library: https://github.com/EmilianoMusso/emNeuralNetwork
Public
Class
Dendrite
Dim
_weight
As
Double
Property
Weight
Get
Return
End
Set
(value
)
_weight = value
Sub
New
()
Me
.Weight = r.NextDouble()
Neuron
_dendrites
List(Of Dendrite)
_dendriteCount
Integer
_bias
_value
_delta
Dendrites
List(Of Dendrite))
_dendrites = value
Bias
_bias = value
Value
_value = value
Delta
_delta = value
ReadOnly
DendriteCount
_dendrites.Count
.Bias = r.NextDouble()
Layer
_neurons
List(Of Neuron)
_neuronCount
Neurons
List(Of Neuron))
_neurons = value
NeuronCount
_neurons.Count
(neuronNum
_neuronCount = neuronNum
NeuralNetwork
_layers
List(Of Layer)
_learningRate
Layers
List(Of Layer))
_layers = value
LearningRate
_learningRate = value
LayerCount
_layers.Count
(LearningRate
, nLayers
List(Of
))
If
nLayers.Count < 2
Then
Exit
.LearningRate = LearningRate
For
ii
= 0
To
nLayers.Count - 1
l
Layer =
Layer(nLayers(ii) - 1)
.Layers.Add(l)
jj
nLayers(ii) - 1
l.Neurons.Add(
Neuron())
Next
Each
n
In
l.Neurons
ii = 0
n.Bias = 0
ii > 0
k
nLayers(ii - 1) - 1
n.Dendrites.Add(
Dendrite)
Function
Execute(inputs
inputs.Count <>
.Layers(0).NeuronCount
Nothing
.LayerCount - 1
curLayer
.Layers(ii)
curLayer.NeuronCount - 1
curNeuron
Neuron = curLayer.Neurons(jj)
curNeuron.Value = inputs(jj)
Else
curNeuron.Value = 0
k = 0
.Layers(ii - 1).NeuronCount - 1
curNeuron.Value = curNeuron.Value +
.Layers(ii - 1).Neurons(k).Value * curNeuron.Dendrites(k).Weight
curNeuron.Value = Sigmoid(curNeuron.Value + curNeuron.Bias)
outputs
la
.Layers(
.LayerCount - 1)
la.NeuronCount - 1
outputs.Add(la.Neurons(ii).Value)
Train(inputs
), outputs
Boolean
Or
outputs.Count <>
.LayerCount - 1).NeuronCount
False
Execute(inputs)
.LayerCount - 1).NeuronCount - 1
Neuron =
.LayerCount - 1).Neurons(ii)
curNeuron.Delta = curNeuron.Value * (1 - curNeuron.Value) * (outputs(ii) - curNeuron.Value)
jj =
.LayerCount - 2
1
Step
-1
kk = 0
.Layers(jj).NeuronCount - 1
iNeuron
.Layers(jj).Neurons(kk)
iNeuron.Delta = iNeuron.Value *
(1 - iNeuron.Value) *
.Layers(jj + 1).Neurons(ii).Dendrites(kk).Weight *
.Layers(jj + 1).Neurons(ii).Delta
kk
ii =
0
jj = 0
.Layers(ii).NeuronCount - 1
.Layers(ii).Neurons(jj)
iNeuron.Bias = iNeuron.Bias + (
.LearningRate * iNeuron.Delta)
iNeuron.DendriteCount - 1
iNeuron.Dendrites(kk).Weight = iNeuron.Dendrites(kk).Weight + (
.LearningRate *
.Layers(ii - 1).Neurons(kk).Value * iNeuron.Delta)
True
network
Private
Form1_Load(sender
Object
, e
EventArgs)
Handles
MyBase
.Load
layerList
With
.Add(2)
.Add(4)
network =
NeuralNetwork(21.5, layerList)
inputs
inputs.Add(txtIn01.Text)
inputs.Add(txtIn02.Text)
ots
) = network.Execute(inputs)
txtOt01.Text = ots(0)
txtOt02.Text = ots(1)