0
0 Комментариев

Приветствую обитателей форума, недавно начал изучать нейронки и решил попробовать написать простенькую сеть, которая на вход принимает 3 числа (0/1) и должна вывести 1, если 1 > 2, в противном случае 0. При обучении возникает ошибка и получается, что какой — то из весов не правильно подобран (понял я это при тестировании результатов, постоянно выдает 1 число). Найти ошибку не получается, прошу помощи.

За код строго не судите, я еще тот идиот.

import numpy as np
import random
 lst = ([0,1,1],
       [1,0,1],
       [1,1,0],
       [0,0,1],
       [0,1,0],
       [1,0,0],
       [0,0,0],
       [1,1,1])
 lst_result = [1,1,1,0,0,0,0,1]
 weight_one_input = random.randint(1,9) / 10
weight_two_input = random.randint(1,9)  / 10
weight_free_input = random.randint(1,9)  / 10
weight_one_out = random.randint(1,9)  / 10
 learning_rate = 0.01
 def sigmoid(x):
     return 1 / (1 + np.exp(-x))
 def learn():
     global weight_one_input
    global weight_two_input
    global weight_free_input
    global weight_one_out
    global learning_rate
     for step in range(10000):
         for x in lst:
             one_input = x[0]
            two_input = x[1]
            free_input = x[2]
            out = lst_result[lst.index(x)]
             ghost_layer = sigmoid(one_input * weight_one_input + two_input * weight_two_input + free_input * weight_free_input)
             out_layer = sigmoid(ghost_layer * weight_one_out)
             err = out_layer - out
             delta_weight = err * (sigmoid(out_layer) * (1 - sigmoid(out_layer)))
             weight_one_out = weight_one_out - (out_layer * err * learning_rate)
             err = weight_one_out * delta_weight
             weight_one_input = weight_one_input - (one_input * err * learning_rate)
            weight_two_input = weight_two_input - (two_input * err * learning_rate)
            weight_free_input = weight_free_input - (free_input * err * learning_rate)
     print([weight_one_input, weight_two_input, weight_free_input, weight_one_out])
 def test():
     weight_1 = 0.6607684757223093
    weight_2 = 0.4023567600436868
    weight_3 = 0.3435469144509494
    weight_4 = -0.003854848220505953
     inp = [0,0,0]
     ghost_layer = sigmoid(inp[0] * weight_1 + inp[1] * weight_2 + inp[2] * weight_3)
     print(sigmoid(ghost_layer * weight_4))    
  test()
 #learn()


Добавить комментарий