Post by Aaditya Parashar on Apr 9, 2024 15:24:44 GMT
I am having a big problem with this piece of code.
It cannot even train for Or, and I want it to train for Xor.
Can anyone please figure out the problem.
It cannot even train for Or, and I want it to train for Xor.
Can anyone please figure out the problem.
$Console:Only
Randomize Timer
Const lr = 0.1
Const nLayers = 2
Const nInputs = 2
Dim Shared bias(1 To nLayers, 1 To nInputs) As Single
Dim Shared weights(1 To nLayers, 1 To nInputs, 1 To nInputs + 1) As Single
Dim Shared outputWeights(1 To nInputs) As Single
Dim Shared outputs(1 To nLayers, 1 To nInputs) As Single
For iLayer = 1 To nLayers
For iInput = 1 To nInputs
bias(iLayer, iInput) = 1
For jInput = 1 To nInputs + 1
weights(iLayer, iInput, jInput) = Rnd
Next jInput
outputWeights(iInput) = Rnd
Next iInput
Next iLayer
Dim __inputs(1 To 2)
For I = 1 To 100000 * 3
__inputs(1) = Sgn((I Mod 4) And 2)
__inputs(2) = (I Mod 4) And 1
train __inputs(), __inputs(1) Xor __inputs(2)
Next I
For I = 0 To 3
__inputs(1) = Sgn(I And 2)
__inputs(2) = I And 1
Print __inputs(1); __inputs(2), forward_propagate(__inputs())
Next I
Function forward_propagate (__inputs() As Single)
For iLayer = 1 To nLayers
For iInput = 1 To nInputs
outputs(iLayer, iInput) = 0
For jInput = 1 To nInputs
outputs(iLayer, iInput) = outputs(iLayer, iInput) + weights(iLayer, iInput, jInput) * __inputs(jInput)
Next jInput
outputs(iLayer, iInput) = Sigmoid(outputs(iLayer, iInput) + weights(iLayer, iInput, nInputs + 1) * bias(iLayer, iInput))
Next iInput
Next iLayer
For iInput = 1 To nInputs
outputP = outputP + outputs(nLayers, iInput) * outputWeights(iInput)
Next iInput
forward_propagate = Sigmoid(outputP)
End Function
Sub train (__inputs(), O)
P = forward_propagate(__inputs())
E = O - P
For iLayer = 2 To nLayers
For iInput = 1 To nInputs
For jInput = 1 To nInputs
weights(iLayer, iInput, jInput) = weights(iLayer, iInput, jInput) + E * outputs(iLayer - 1, jInput) * lr
Next jInput
weights(iLayer, iInput, nInputs + 1) = weights(iLayer, iInput, nInputs + 1) + E * bias(iLayer - 1, iInput) * lr
Next iInput
Next iLayer
For iInput = 1 To nInputs
For jInput = 1 To nInputs
weights(1, iInput, jInput) = weights(1, iInput, jInput) + E * __inputs(jInput) * lr
Next jInput
Next iInput
End Sub
Function Sigmoid (X)
Sigmoid = -X * (X > 0) '1 / (1 + Exp(1) ^ (-X))
End Function