Как найти Персептрон: вес1, вес2 и математическое смещение

Как найти значения веса1, веса2 и смещения? Какой обобщенный математический способ найти эти 3 значения для любой задачи!

import pandas as pd


weight1 = 0.0
weight2 = 0.0
bias = 0.0

test_inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]
correct_outputs = [False, False, False, True]
outputs = []

for test_input, correct_output in zip(test_inputs, correct_outputs):
    linear_combination = weight1 * test_input[0] + weight2 * test_input[1] + bias
    output = int(linear_combination >= 0)
    is_correct_string = 'Yes' if output == correct_output else 'No'
    outputs.append([test_input[0], test_input[1], linear_combination, output, is_correct_string])


num_wrong = len([output[4] for output in outputs if output[4] == 'No'])
output_frame = pd.DataFrame(outputs, columns=['Input 1', '  Input 2', '  Linear Combination', '  Activation Output', '  Is Correct'])
if not num_wrong:
    print('Nice!  You got it all correct.\n')
else:
    print('You got {} wrong.  Keep trying!\n'.format(num_wrong))
print(output_frame.to_string(index=False))

4 ответа

Следующее также работало для меня:

weight1 = 1.5
weight2 = 1.5
bias = -2

Проблема просит вас оценить weight1, weight2 и смещение, когда ваши входные данные [(0,0), (0,1), (1,0), (1,1)], чтобы произвести [False, False, Ложь Правда]. "Ложь" в этом контексте будет результатом, который является отрицательным числом. Напротив, "True" будет результатом, который является положительным числом. Итак, вы оцениваете следующее:

x1 * weight1 + x2 * weight2 + bias 'положительно или отрицательно

Например, установив weight1=1, weight2=1 и bias=-1.1 (возможное решение), вы получите первый вход:

0 * 1 + 0 * 1 + (-1.1) = -1.1, что является отрицательным значением, означающим, что оно имеет значение False

для следующего ввода:

0 * 1 + 1 * 1 + (-1.1) = -0,1, что является отрицательным значением, то есть оценивается как ложное

для следующего ввода:

1 * 1 + 0 * 1 + (-1.1) = -0,1, что является отрицательным значением, то есть оценивается как ложное

и для последнего ввода:

1 * 1 + 1 * 1 + (-1.1) = +0,9, что является положительным значением, то есть оно оценивается как истинное

Следующее работало для меня:

weight1 = 1.5
weight2 = 1.5
bias = -2

Буду обновлять когда я лучше пойму почему

Что ж, в случае нормальных уравнений вам не нужна единица смещения. Таким образом, это может быть то, что вы после (имейте в виду, что я переделал True а также False значения для 1 а также 0соответственно):

import numpy as np

A = np.matrix([[0, 0], [0, 1], [1, 0], [1, 1]])
b = np.array([[0], [0], [0], [1]])

x = np.linalg.inv(np.transpose(A)*A)*np.transpose(A)*b

print(x)

Урожайность:

[[ 0.33333333]
 [ 0.33333333]]

Дальнейшие подробности решения приведены здесь.

X1w1 + X2W2 + bias Тест:

linear_combination >= 0

из заданных входных значений:

test_inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]

Значение AND вычисляется как истина в тесте только один раз, поэтому результат типичной операции AND должен быть представлен как:

1   1   True 
1   0   False
0   1   False
0   0   False

Учитывая, что когда мы вводим тестовые входные данные в уравнение: X1w1 + X2W2 + bias, должен быть только один истинный результат. Как отмечалось выше, наш тест состоит в том, что линейные комбинации уравнений должны быть больше или равны нулю. Я считаю, что вопрос заключается в том, чтобы этот вывод был истинным только один, как видно из тестового прогона. Следовательно, чтобы получить ложное значение, результат должен быть отрицательным. Самый простой способ - проверить уравнение с небольшими значениями и отрицательным смещением. Я попытался

weight1 = 1
weight2 = 1
bias = -2
Другие вопросы по тегам