In [ ]:
from itertools import product
from pprint import pprint
import pandas as pd
In [40]:
flat_training_set = [
[1, i1, i2, 1. if (i1 or i2) else -1]
for i1, i2 in product([0, 1], [0, 1])
]
columns = ['Bias', 'Input1', 'Input2', 'Output', 'Error', 'Err Count', 'W0', 'W1', 'W2']
df = pd.DataFrame(flat_training_set, columns=columns[:4])
print(df)
threshold = 0.5
learning_rate = 0.1
weights = [0, 0, 0]
training_set = [[row[:3], row[-1]] for row in flat_training_set]
def dot_product(values, weights):
return sum(value * weight for value, weight in zip(values, weights))
print(training_set)
In [46]:
training_set = [[[1, 0, 0], 1], [[1, 0, 1], 1], [[1, 1, 0], 1], [[1, 1, 1], -1]]
ans = []
error_count = len(training_set)
weights = [0, 0, 0]
for epoch in range(3):
print('-' * 20 + str(epoch) + '-'*20 + str(error_count))
error_count = 0
error_L2 = 0.
for input_vector, desired_output in training_set:
print(weights)
result = dot_product(input_vector, weights) > threshold
error = desired_output - result
error_L2 += error ** 2.
if abs(error) > 0.001:
error_count += 1
for index, value in enumerate(input_vector):
weights[index] += learning_rate * error * value
ans += [input_vector + [desired_output, (error_L2)**.5, error_count] + weights]
if error_count == 0:
break
df = pd.DataFrame(ans, columns=columns)
print(df)
In [ ]:
In [ ]:
def activate(i):
if i >= 0.5:
return 1
return 0
print(learn(training_set, activate=activate))
In [ ]:
In [ ]: