def predict(data: List[List[float]], netwerk: NeuronNetwork): """Gegeven de data van een plant kunnen we met een bepaalde zekerheid voorspellen welke plant dit is. In deze functie veranderen we onze output. De plant die de hoogste kans heeft om correct te zijn, is de plant die wij gaan gokken.""" antwoorden = [] for i in data: netwerk.feed_forward(i) output = netwerk.output_neuronen[-1] # Pak alleen de outputlaag index = output.index(max(output)) # Welke plant heeft de grootste kans om correct te zijn? Wanneer twee of # drie planten dezelfde accuracy hebben, wordt de eerste gepakt. lege_lijst = [0, 0, 0] lege_lijst[index] = 1 antwoorden.append(lege_lijst) return antwoorden
def test_AND(self): inputs = [[0, 0], [1, 0], [0, 1], [1, 1]] verwachte_outputs = [[0], [0], [0], [1]] epochs = 100 AND = Neuron([-0.5, 0.5], 1.5, 1, 'AND gate') laag_een = NeuronLaag([AND], 'L1') ANDer = NeuronNetwork([laag_een]) ANDer.train(inputs, verwachte_outputs, epochs) antwoorden = [] for i in inputs: ANDer.feed_forward(i) tussen_antwoorden = [] for j in ANDer.output_neuronen[-1]: if (j % 1) == 0.5: tussen_antwoorden.append(int(math.ceil(j))) else: tussen_antwoorden.append(int(round(j))) antwoorden.append(tussen_antwoorden) self.assertEqual(antwoorden, verwachte_outputs) # Kijk of de outputs goed zijn
def test_Half_adder(self): x1_1 = Neuron([0.0, 0.1], 0, 1, 'F') x1_2 = Neuron([0.2, 0.3], 0, 1, 'G') x1_3 = Neuron([0.4, 0.5], 0, 1, 'H') laag_een = NeuronLaag([x1_1, x1_2, x1_3], 'L1') x2_1 = Neuron([0.6, 0.7, 0.8], 0, 1, 'S') x2_2 = Neuron([0.9, 1, 1.1], 0, 1, 'C') laag_twee = NeuronLaag([x2_1, x2_2], 'L2') Half_adder = NeuronNetwork([laag_een, laag_twee]) inputs = [[0, 0], [0, 1], [1, 0], [1, 1]] verwachte_outputs = [[0, 0], [1, 0], [1, 0], [0, 1]] epochs = 1000 Half_adder.train(inputs, verwachte_outputs, epochs) antwoorden = [] for i in inputs: Half_adder.feed_forward(i) tussen_antwoorden = [] for j in Half_adder.output_neuronen[-1]: if (j % 1) == 0.5: tussen_antwoorden.append(int(math.ceil(j))) else: tussen_antwoorden.append(int(round(j))) antwoorden.append(tussen_antwoorden) self.assertEqual(antwoorden, verwachte_outputs) # Kijk of de outputs goed zijn
def test_XOR(self): x1_1 = Neuron([0.2, -0.4], 0, 1, 'F') x1_2 = Neuron([0.7, 0.1], 0, 1, 'G') laag_een = NeuronLaag([x1_1, x1_2], 'L1') x2_1 = Neuron([0.6, 0.9], 0, 1, 'O') laag_twee = NeuronLaag([x2_1], 'L2') XOR = NeuronNetwork([laag_een, laag_twee]) inputs = [[0, 0], [0, 1], [1, 0], [1, 1]] verwachte_outputs = [[0], [1], [1], [0]] epochs = 1000 XOR.train(inputs, verwachte_outputs, epochs) antwoorden = [] for i in inputs: XOR.feed_forward(i) tussen_antwoorden = [] for j in XOR.output_neuronen[-1]: if (j % 1) == 0.5: tussen_antwoorden.append(int(math.ceil(j))) else: tussen_antwoorden.append(int(round(j))) antwoorden.append(tussen_antwoorden) self.assertEqual(antwoorden, verwachte_outputs) # Kijk of de outputs goed zijn
def create_network(layers): """Hier maken we een neuron network aan.""" return NeuronNetwork(layers)