1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import numpy
def activate(x): return 1 / (1 + numpy.exp(-x))
class NeuralNetwork: def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate=0.3): self.inodes = inputnodes self.hnodes = hiddennodes self.onodes = outputnodes
self.lr = learningrate
self.wih = numpy.random.normal(0.0, pow(self.inodes, -0.5), (self.hnodes, self.inodes)) self.who = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.onodes, self.hnodes))
def query(self, inputs_list): inputs = numpy.array(inputs_list, ndmin=2).T hidden_inputs = numpy.dot(self.wih, inputs) hidden_outputs = activate(hidden_inputs) final_inputs = numpy.dot(self.who, hidden_outputs) final_outputs = activate(final_inputs)
return final_outputs
def train(self, inputs_list, targets_list): inputs = numpy.array(inputs_list, ndmin=2).T targets = numpy.array(targets_list, ndmin=2).T
hidden_inputs = numpy.dot(self.wih, inputs) hidden_outputs = activate(hidden_inputs)
final_inputs = numpy.dot(self.who, hidden_outputs) final_outputs = activate(final_inputs)
output_errors = targets - final_outputs hidden_errors = numpy.dot(self.who.T, output_errors)
self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs)) self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs))
|