Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. import numpy as np
  2.  
  3. class NeuralNetwork(object):
  4. def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate):
  5. self.input_nodes = input_nodes
  6. self.hidden_nodes = hidden_nodes
  7. self.output_nodes = output_nodes
  8. self.weights_input_to_hidden = np.random.normal(0.0, self.input_nodes**-0.5, (self.input_nodes, self.hidden_nodes))
  9. self.weights_hidden_to_output = np.random.normal(0.0, self.hidden_nodes**-0.5, (self.hidden_nodes, self.output_nodes))
  10. self.lr = learning_rate
  11. self.activation_function = lambda x : 1 / (1 + np.exp(-x))
  12.  
  13. def train(self, features, targets):
  14. n_records = features.shape[0]
  15. delta_weights_i_h = np.zeros(self.weights_input_to_hidden.shape)
  16. delta_weights_h_o = np.zeros(self.weights_hidden_to_output.shape)
  17. for X, y in zip(features, targets):
  18. final_outputs, hidden_outputs = self.forward_pass_train(X)
  19. delta_weights_i_h, delta_weights_h_o = self.backpropagation(final_outputs, hidden_outputs, X, y,delta_weights_i_h, delta_weights_h_o)
  20. self.update_weights(delta_weights_i_h, delta_weights_h_o, n_records)
  21.  
  22. def forward_pass_train(self, X):
  23. hidden_inputs = np.dot(X, self.weights_input_to_hidden)
  24. hidden_outputs = self.activation_function(hidden_inputs)
  25. final_inputs = np.dot(hidden_outputs, self.weights_hidden_to_output)
  26. final_outputs = final_inputs
  27. return final_outputs, hidden_outputs
  28.  
  29. def backpropagation(self, final_outputs, hidden_outputs, X, y, delta_weights_i_h, delta_weights_h_o):
  30. error = y - final_outputs
  31. hidden_error = np.dot(error, self.weights_hidden_to_output.T)
  32. output_error_term = error
  33. hidden_error_term = hidden_error * hidden_outputs * (1 - hidden_outputs)
  34. delta_weights_i_h += hidden_error_term * X[:, None]
  35. delta_weights_h_o += output_error_term * hidden_outputs[:, None]
  36. return delta_weights_i_h, delta_weights_h_o
  37.  
  38. def update_weights(self, delta_weights_i_h, delta_weights_h_o, n_records):
  39. self.weights_hidden_to_output += self.lr * delta_weights_h_o / n_records
  40. self.weights_input_to_hidden += self.lr * delta_weights_i_h / n_records
  41.  
  42. def run(self, features):
  43. hidden_inputs = np.dot(features, self.weights_input_to_hidden)
  44. hidden_outputs = self.activation_function(hidden_inputs)
  45. final_inputs = np.dot(hidden_outputs, self.weights_hidden_to_output)
  46. final_outputs = final_inputs
  47. return final_outputs
  48.  
  49. iterations = 1500
  50. learning_rate = 0.4
  51. hidden_nodes = 35
  52. output_nodes = 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement