мой персептрон мог классифицировать OR / AND, но не мог классифицировать NOR / NAND - PullRequest
0 голосов
/ 20 апреля 2020

Вот мой код в python

def error(y_desired, y):
    return y_desired != y


def step_func(weighted_sum, theta):
    return 1 if ((weighted_sum - theta) >= 0) else 0


def weight_adjustment(error, alpha, x_element):
    return error*alpha*x_element


def weighted_sum(w, x_epoch):
    weighted_sum = 0
    for i in range(len(w)):
        weighted_sum += w[i]*(x_epoch[i])
    return weighted_sum


def perceptron(x, y_desired, w, theta, alpha):
    cond = True
    epochs = 0
    while(cond == True):
        count = 0
        epochs += 1
        print(f'Epoch number - {epochs}')
        for epoch in range(len(x)):
            weighted_sums = round(weighted_sum(w, x[epoch]), 10)
            y = step_func(weighted_sums, theta)
            if error(y_desired[epoch], y):
                count += 1
                for weights in range(len(w)):
                    w[weights] = round(w[weights] + weight_adjustment(error = (y_desired[epoch] - y),
                                                   alpha = alpha,
                                                   x_element = x[epoch][weights]), 10)
            print(w)
        print('\n')
        if count == 0:
            cond = False
    print('Final Weights -')
    return w


x = [[0, 0], [0, 1], [1, 0], [1, 1]]
y_desired = [0, 0, 0, 1]
w = [0.3, -0.1]
perceptron(x, y_desired, w, theta = 0.2, alpha = 0.1)

ИЛИ / И работает нормально, но когда я go для [1, 0, 0, 0], он идет в бесконечном l oop , Нет никакой разницы в классификации AND / NAND / OR / NOR. Все могут быть линейно классифицированы.

Я что-то упустил принципиально или в силовых тренировках? Где я сделал ошибку? Если возможно, поделитесь учебным материалом.

1 Ответ

0 голосов
/ 20 апреля 2020

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

Я рекомендую https://stackabuse.com/creating-a-neural-network-from-scratch-in-python/ серию из 3 статей, которые неплохо объясняют основы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...