Как найти Персептрон: вес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