Public MustInherit Class PerseptronSimple
'Autor: Rafael Angel Montero Fernández.
'Correo Sharkyc12@gmail.com
'Fecha de creacion de la neurona domingo 18 de abril del 2021.
'Hora 3:18am.
'Esta es mi primera neurona que si he comprobado que esta correctamente diseñada.
'Basada en el video de youTube:
'Redes Neuronales Artificiales | El Perceptrón Simple | Algoritmo de entrenamiento | Python
Private mEntradas(2) As Double ' 0 to 4 (1 to 3)
Private mPesos(2) As Double
Public Overridable Sub InicializarPesos()
'Procedimiento para inicializar los pesos.
Const NUMERO_DE_ENTRADAS As Double = 2
For i As Integer = 0 To mPesos.Length - 1
mPesos(i) = 1 / (1 + NUMERO_DE_ENTRADAS)
Next
End Sub
Public Overridable Property prPeso1() As Double
Get
Return mPesos(0)
End Get
Set(value As Double)
mPesos(0) = value
End Set
End Property
Public Overridable Property prPeso2() As Double
Get
Return mPesos(1)
End Get
Set(value As Double)
mPesos(1) = value
End Set
End Property
Public Overridable Property prPeso3() As Double
Get
Return mPesos(2)
End Get
Set(value As Double)
mPesos(2) = value
End Set
End Property
Public Overridable Property prPeso4() As Double
Get
Return mPesos(3)
End Get
Set(value As Double)
mPesos(3) = value
End Set
End Property
Public Overridable Property prEntrada1() As Double
Get
Return mEntradas(0)
End Get
Set(value As Double)
mEntradas(0) = value
End Set
End Property
Public Overridable Property prEntrada2() As Double
Get
Return mEntradas(1)
End Get
Set(value As Double)
mEntradas(1) = value
End Set
End Property
Public Overridable Property prEntrada3() As Double
Get
Return mEntradas(2)
End Get
Set(value As Double)
mEntradas(2) = value
End Set
End Property
Public Overridable Property prEntrada4() As Double
Get
Return mEntradas(3)
End Get
Set(value As Double)
mEntradas(3) = value
End Set
End Property
Private vUmbralDeActivacion As Double
Public Overridable Property prUmbralDeActivacion() As Double
'Si el valor de la funcion de activacion es mayor al umbral entonces, se activa la neurona y produce una salida.
Get
Return vUmbralDeActivacion
End Get
Set(value As Double)
vUmbralDeActivacion = value
End Set
End Property
Protected Overridable Function Activacion() As Double
' On Error Resume Next
Dim sumatoria_de_entradas_y_pesos As Double = 0
For i As Integer = 0 To mEntradas.Length - 1
sumatoria_de_entradas_y_pesos += mEntradas(i) * mPesos(i)
Next
sumatoria_de_entradas_y_pesos -= vUmbralDeActivacion
Debug.Print("En Activacion sumatoria=" & sumatoria_de_entradas_y_pesos)
'El condicional if no es necesario aquí, se ocnserva por si acaso.
If sumatoria_de_entradas_y_pesos > vUmbralDeActivacion Then
'En la activacion es donde se verifica si se activa o no de acuerdo al umbral de activacion.
Return sumatoria_de_entradas_y_pesos 'intencional
Else
Return 0 'sumatoria_de_entradas_y_pesos 'intencional
End If
End Function
Public Overridable Function Salida() As Double
Debug.Print("Activacion en salida = " & Activacion())
If Activacion() >= 0 Then
' 'En la salida es donde se verifica si el valor es igual o menor a cero o es mayor o igual a cero.
Return 1
End If
If Activacion() < 0 Then
' 'En la salida es donde se verifica si el valor es igual o menor a cero o es mayor o igual a cero.
Return 0
End If
'If Activacion() = 0 Then
' ' 'No se usa porque da problemas al entrenar la neurona.
' Return 0
'End If
Return Activacion()
End Function
Public Overridable Sub AjustarUmbral()
'Dim v As Double = vUmbralDeActivacion - (vFactorDeAprendizage * vError_calculado)
vUmbralDeActivacion += (vFactorDeAprendizage * vError_calculado)
End Sub
Public Sub AjustarPesos()
For i As Integer = 0 To mPesos.Length - 1
mPesos(i) += vFactorDeAprendizage * vError_calculado * mEntradas(i)
Next
End Sub
Private vError_calculado As Double
Public Overridable Sub CalcularError()
'Se debe ejecutar primero antes de ajustar umbral y pesos.
vError_calculado = Salida() - vValorDeseado
End Sub
Protected Overridable Sub CambioDeUmbral()
'Despues de CalcularError, se procede a cambiar el umbral.
vUmbralDeActivacion = vFactorDeAprendizage * vError_calculado
End Sub
Private vValorDeseado As Double
Public Overridable Property prValorDeseado() As Double
'Util para calcular el error de aprendizaje.
Get
Return vValorDeseado
End Get
Set(value As Double)
vValorDeseado = value
End Set
End Property
Private vFactorDeAprendizage As Double
Public Overridable Property prFactorDeAprendizage() As Double
'Util para calcular el error de aprendizaje.
Get
Return vFactorDeAprendizage
End Get
Set(value As Double)
vFactorDeAprendizage = value
End Set
End Property
End Class
En mi caso me ha servido para enriquecer más mis conocimientos de las redes neuronales artificiales.