• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Network

a guest Jun 15th, 2019 96 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. import numpy as np
2. import Layer
3. import math
4.
5. learningRate = 0.05
6. momentum = 0.9
7.
8.
9. class Network:
10.     def __init__(self, layersArray):
11.         self.layers = layersArray
12.
13.     def activationFun(self, values, function):
14.         x, y = values.shape
15.         result = np.asmatrix(np.zeros((x, y), dtype=float))
16.         if function == 'lin':
17.             for i in range(x):
18.                 for j in range(y):
19.                     result[i, j] = values[i, j]
20.             return result
21.         elif function == 'sig':
22.             for i in range(x):
23.                 for j in range(y):
24.                     result[i, j] = (1.0 / (1.0 + np.exp(-values[i, j])))
25.             return result
26.
27.     def activationFunDerivative(self, values, function):
28.         x, y = values.shape
29.         result = np.asmatrix(np.zeros((x, y), dtype=float))
30.         if function == 'lin':
31.             for i in range(x):
32.                 for j in range(y):
33.                     result[i, j] = 1
34.             return result
35.         elif function == 'sig':
36.             temp = self.activationFun(values, 'sig')
37.             for i in range(x):
38.                 for j in range(y):
39.                     result[i, j] = temp[i, j] * (1.0 - temp[i, j])
40.             return result
41.
42.     def forwardPropagate(self, inputMatrix):
43.         self.layers[0].input = inputMatrix
44.
45.         if isinstance(self.layers[0], Layer.affineLayer):
46.             if (self.layers[0].isBias):
47.                 self.layers[0].z = self.layers[0].weights * self.layers[0].input + self.layers[0].bias
48.             else:
49.                 self.layers[0].z = self.layers[0].weights * self.layers[0].input
50.
51.             self.layers[0].output = self.activationFun(self.layers[0].z, self.layers[0].activator)
52.         else:
53.             centroids = self.layers[0].centroids
54.             widths = self.layers[0].widths
55.             self.layers[0].output = np.asmatrix(np.zeros((centroids.shape[0], 1), dtype=float))
56.
57.             for counter, centroid in enumerate(centroids):
58.                 sum = 0
59.                 for i in range(centroid.shape[1]):
60.                     sum += pow(centroid[0, i] - inputMatrix[i, 0], 2)
61.                 self.layers[0].output[counter, 0] = math.exp(-widths[counter, 0] * sum)
62.
63.         for i in range(1, self.layers.size):
64.             self.layers[i].input = self.layers[i - 1].output
65.
66.             if isinstance(self.layers[i], Layer.affineLayer):
67.                 if (self.layers[i].isBias):
68.                     self.layers[i].z = self.layers[i].weights * self.layers[i].input + self.layers[i].bias
69.
70.                 else:
71.                     self.layers[i].z = self.layers[i].weights * self.layers[i].input
72.
73.                 self.layers[i].output = self.activationFun(self.layers[i].z, self.layers[i].activator)
74.             else:
75.                 centroids = self.layers[i].centroids
76.                 widths = self.layers[i].widths
77.                 self.layers[i].output = np.asmatrix(np.zeros((centroids.shape[0], 1), dtype=float))
78.
79.                 for counter, centroid in enumerate(centroids):
80.                     sum = 0
81.                     for i in range(centroid.shape[1]):
82.                         sum += pow(centroid[0, i] - inputMatrix[i, 0], 2)
83.                     self.layers[0].output[counter, 0] = math.exp(-widths[counter, 0] * sum)
84.
85.     def computeErrors(self, outputMatrix):
86.         self.layers[-1].error = outputMatrix - self.layers[-1].output
87.         for i in reversed(range(self.layers.size - 1)):
88.             if isinstance(self.layers[i], Layer.affineLayer):
89.                 self.layers[i].error = self.layers[i + 1].weights.T * self.layers[i + 1].error
90.             else:
91.                 continue
92.
93.     def modifyWeights(self):
94.         for i in range(self.layers.size):
95.             if isinstance(self.layers[i], Layer.affineLayer):
96.                 # WAGI NEURONOW
97.                 self.layers[i].weightsChanges = learningRate * np.multiply(
98.                     self.activationFunDerivative(self.layers[i].output, self.layers[i].activator),
99.                     self.layers[i].error) * self.layers[i].input.T + momentum * self.layers[i].weightsChanges
100.
101.                 self.layers[i].weights = self.layers[i].weights + self.layers[i].weightsChanges
102.
103.                 # WAGI BIASU
104.                 if (self.layers[i].isBias):
105.                     self.layers[i].biasChanges = learningRate * np.multiply(
106.                         self.activationFunDerivative(self.layers[i].output, self.layers[i].activator),
107.                         self.layers[i].error) + momentum * self.layers[i].biasChanges
108.
109.                     self.layers[i].bias = self.layers[i].bias + self.layers[i].biasChanges
110.             else:
111.                 continue
112.
113.     def simulate(self, inputMatrix, outputMatrix):
114.         self.forwardPropagate(inputMatrix)
115.         self.computeErrors(outputMatrix)
116.         self.modifyWeights()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top