Advertisement
Felanpro

dd

Dec 20th, 2022 (edited)
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. import random
  2.  
  3. class Layer:
  4. def __init__(self, nodesIn, nodesOut):
  5. self.nodesIn = nodesIn
  6. self.nodesOut = nodesOut
  7. self.weights = [[0.0] * self.nodesOut] * self.nodesIn
  8.  
  9. for x in range(self.nodesIn):
  10. for y in range(self.nodesOut):
  11. self.weights[x][y] = random.random() - 0.5
  12.  
  13. def forward(self, inputs):
  14. self.inputs = inputs
  15. if(len(self.inputs)) != self.nodesIn:
  16. print("Incorrect number of inputs to the layer")
  17. else:
  18. self.output = [0.0] * self.nodesOut
  19. for x in range(self.nodesIn):
  20. for y in range(self.nodesOut):
  21. self.output[y] += self.inputs[x] * self.weights[x][y]
  22.  
  23. def getCost(self, expectedOutput):
  24. self.expectedOutput = expectedOutput
  25. self.error = [0.0] * len(self.output)
  26. for x in range(len(self.nodesOut)):
  27. self.error[x] = self.output[x] - self.expectedOutput[x]
  28.  
  29. return self.error
  30.  
  31. def updateWeightsGradients(self, gradientsPerNeuron):
  32. self.dWeights = [[0.0] * self.nodesOut] * self.nodesIn
  33. for x in range(self.nodesIn):
  34. for y in range(self.nodesOut):
  35. self.dWeights[x][y] += gradientsPerNeuron[y] * self.inputs[x]
  36.  
  37. for x in range(self.nodesIn):
  38. for y in range(self.nodesOut):
  39. self.weights[x][y] -= self.dWeights[x][y]
  40.  
  41.  
  42.  
  43. class Network:
  44. def __init__(self, layers):
  45. self.layers = layers
  46.  
  47. def forward(self, inputs):
  48. self.layers[0].forward(inputs)
  49. for x in range(1, len(self.layers)):
  50. self.layers[x].forward(self.layers[x - 1].output)
  51. self.output = self.layers[len(self.layers) - 1].output
  52.  
  53. def updateWeights(self, error):
  54. #Get the cost of the final output
  55. self.error = error
  56. self.dError = 2 * self.error
  57. self.gradientsPerNeuron = [[] * 20] * len(self.layers)
  58. print(self.gradientsPerNeuron)
  59. #self.layers[2].updateWeightsGradients(self.gradientsPerNeuron)
  60.  
  61.  
  62. neuralNetwork = Network([
  63. Layer(1, 3),
  64. Layer(3, 2),
  65. Layer(2, 1)])
  66.  
  67. neuralNetwork.forward([3])
  68.  
  69. print(neuralNetwork.output)
  70.  
  71. #neuralNetwork.layers[2].updateWeightsGradients([3])
  72. neuralNetwork.updateWeights([5])
  73. neuralNetwork.forward([3])
  74.  
  75. print(neuralNetwork.output)
  76.  
  77.  
  78.  
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement