class NetworkTests(unittest.TestCase): def setUp(self): self.red = NeuralNetwork(2, [1, 1]) self.layer = NeuralLayer(2, 1) self.layer2 = NeuralLayer(1, 1) self.neuron = Neuron(2) self.neuron2 = Neuron(1) self.red2 = NeuralNetwork(2, [2, 2]) self.lay1 = NeuralLayer(2, 2) self.lay2 = NeuralLayer(2, 2) self.neur1 = Neuron(2) self.neur2 = Neuron(2) self.neur3 = Neuron(2) self.neur4 = Neuron(2) # testcase entregado en ucursos def testCase1(self): self.neuron.custom([0.4, 0.3], 0.5) self.neuron2.custom([0.3], 0.4) self.layer.custom([self.neuron]) self.layer2.custom([self.neuron2]) self.red.custom([self.layer, self.layer2]) self.red.train([1, 1], [1]) self.assertEqual(round(self.neuron.weight[0], 15), 0.402101508999489) self.assertEqual(round(self.neuron.weight[1], 15), 0.302101508999489) self.assertEqual(round(self.neuron2.weight[0], 15), 0.330262548639919) self.assertEqual(round(self.neuron.bias, 15), 0.502101508999489) self.assertEqual(round(self.neuron2.bias, 15), 0.439377453127974) def testCase2(self): self.neur1.custom([0.7, 0.3], 0.5) self.neur2.custom([0.3, 0.7], 0.4) self.neur3.custom([0.2, 0.3], 0.3) self.neur4.custom([0.4, 0.2], 0.6) self.lay1.custom([self.neur1, self.neur2]) self.lay2.custom([self.neur3, self.neur4]) self.red2.custom([self.lay1, self.lay2]) self.red2.train([1, 1], [1, 1]) self.assertEqual(round(self.neur1.weight[0], 15), 0.702510448549328) self.assertEqual(round(self.neur1.weight[1], 15), 0.302510448549328) self.assertEqual(round(self.neur2.weight[0], 15), 0.302498011357483) self.assertEqual(round(self.neur2.weight[1], 15), 0.702498011357483) self.assertEqual(round(self.neur3.weight[0], 15), 0.229947378819557) self.assertEqual(round(self.neur3.weight[1], 15), 0.329383628639501) self.assertEqual(round(self.neur4.weight[0], 15), 0.419430056526462) self.assertEqual(round(self.neur4.weight[1], 15), 0.219064291698386) self.assertEqual(round(self.neur1.bias, 15), 0.502510448549328) self.assertEqual(round(self.neur2.bias, 15), 0.402498011357483) self.assertEqual(round(self.neur3.bias, 15), 0.336629542251590) self.assertEqual(round(self.neur4.bias, 15), 0.623765488150905)
# number = random.randint(0, 17) if number == 1 or number == 2 or number == 3: rightAnswers = np.array([[1, 0]]) elif number == 4 or number == 5 or number == 6: rightAnswers = np.array([[0, 1]]) elif 6 < number < 16 or number == 17: rightAnswers = np.array([[1, 1]]) elif number == 0 or number == 16: rightAnswers = np.array([[0, 0]]) # print('rightAnswers = ', rightAnswers) image = cv2.imread("dataset/test/" + str(number) + ".png", 0).flatten() / 255 if pro == 15 and i % 25 == 0: ppi = np.vstack((ppi, n.train(image, rightAnswers).T)) plt.clf() plt.xlabel(i * 17) plt.plot(ppi) plt.draw( ) # Должно быть это, а в итоге не это, приходится каждый раз открывать картинку plt.pause(0.0000000000000000000001) else: n.train(image, rightAnswers) plt.title('lr = ' + str(learning_rate)) plt.ioff() plt.show() for i in range(18): image = cv2.imread("dataset/test/" + str(i) + ".png", 0).flatten() / 255
def main(): # Creating NN nn = NeuralNetwork([784, 64, 3]) # Creating training data createTraining(cats_training, "cat") createTraining(trains_training, "train") createTraining(rainbows_training, "rainbow") # Creating test data createTest(cats_testing, "cat") createTest(trains_testing, "train") createTest(rainbows_testing, "rainbow") # make one array from all the training and test data training_data = cats_training + trains_training + rainbows_training testing_data = cats_testing + trains_testing + rainbows_testing # Normalize the training data and testing data, (0-1) normalizeValues(trains_training) normalizeValues(testing_data) # arrange the data in specific format that will fit to the NN library i created. for j in range(2400): for i in range(785): training_data[j][i] = [training_data[j][i]] for j in range(600): for i in range(785): testing_data[j][i] = [testing_data[j][i]] ''' training the model with the training data (30 times), shuffle the training data every iteration. specific target to every label. ''' for i in range(35): random.shuffle(training_data) for j in range(2400): target = [[0], [0], [0]] if (training_data[j][784] == ['cat']): target[0] = [1] nn.train(training_data[j][:-1], target, 1) if (training_data[j][784] == ['train']): target[1] = [1] nn.train(training_data[j][:-1], target, 1) if (training_data[j][784] == ['rainbow']): target[2] = [1] nn.train(training_data[j][:-1], target, 1) ''' Calculate the acc. should be more various of training data. currently : 800 cats, 800 rainbows, 800 trains. ''' acc = 0 trains = 0 rainbows = 0 cats = 0 for i in range(len(testing_data)): label = testing_data[i][784] guess = nn.feed_forword(testing_data[i][:-1]) if max(guess) == guess[0] and label == ['cat']: acc += 1 cats += 1 if max(guess) == guess[1] and label == ['train']: acc += 1 trains += 1 if max(guess) == guess[2] and label == ['rainbow']: acc += 1 rainbows += 1 print("Acc : " + str(acc)) print("length of testing data : " + str(len(testing_data))) print("Cats : " + str(cats)) print("Rainbows : " + str(rainbows)) print("trains : " + str(trains))