как реализовать градиентный спуск или любой другой алгоритм для ИИ - PullRequest
0 голосов
/ 10 ноября 2019

Я довольно плохо знаком с python и программированием в целом, я всегда хотел закодировать какой-нибудь простой ИИ, и только вчера я решил написать ИИ логики XOR. Я начал писать некоторый код, но я застрял на фактическом обучении нейронной сети.

Я немного исследовал ИИ и нашел алгоритм под названием «градиентный спуск», который, как мне показалось, идеально подходит для моей проблемы, но потомя обнаружил, что мой маленький мозг начальной школы не может обработать всю математику за ним.

Вот что я кодировал до сих пор:

import numpy

def sigmoid(x):
    return 1/(1 + numpy.exp(-x))

def squared_error(pre, tar):
    return (pre - tar) * (pre - tar)

def neuron1(inp1, inp2):
    z = inp1 * w11 + inp2 * w21 + b1
    return sigmoid(z)

def neuron2(inp1, inp2):
    z = inp1 * w12 + inp2 * w22 + b2
    return sigmoid(z)

def output_neuron(n1, n2):
    z = n1 * w31 + n2 * w32 + b3
    return sigmoid(z)


print("training cycles: ")
training_cycles = int(input())

w11 = numpy.random.randn()
w12 = numpy.random.randn()  
w21 = numpy.random.randn()
w22 = numpy.random.randn()
w31 = numpy.random.randn()
w32 = numpy.random.randn()
b1 = numpy.random.randn()
b2 = numpy.random.randn()
b3 = numpy.random.randn()
lr = 0.01

for x in range(training_cycles):
    trainInp1 = numpy.random.randint(0,2)
    trainInp2 = numpy.random.randint(0,2)
    trainInp = [trainInp1, trainInp2]

    data = [[1, 1], [1, 0], [0, 1], [0, 0]]
    if(trainInp == data[0]):
        target = 0
    if(trainInp == data[1]):
        target = 1
    if(trainInp == data[2]):
        target = 1
    if(trainInp == data[3]):
        target = 0

    n1 = neuron1(trainInp1, trainInp2)
    n2 = neuron2(trainInp1, trainInp2)
    output = output_neuron(n1, n2)
    sqr_err = squared_error(output, target)

    #TRAINING ALGORITHM HERE, IF ONLY I KNEW HOW...

    print(sqr_err)

while(True):
    print("input 1: ")
    in1 = int(input())
    print("input 2: ")
    in2 = int(input())
    final_neuron1 = neuron1(in1, in2)
    final_neuron2 = neuron2(in1, in2)
    final_output = output_neuron(final_neuron1, final_neuron2)
    print(final_output)

Может кто-нибудь, пожалуйста, порекомендуйте мне более простой алгоритм или что-то вроде? Я действительно застрял здесь.

...