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)
Esempio n. 2
0
        # 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
Esempio n. 3
0
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))