In [14]:
import numpy as np

In [69]:
def create_training_data(n, f):
    input1 = np.random.rand(n) * 10
    input2 = np.random.rand(n) * 10
    training_data = np.array([input1, input2, f(input1, input2)])
    return training_data

def func(x):
    return 2*x + 1

#data = create_training_data(20, func)
#weights = np.random.rand(3)*2 - 1

def sum_(inputs, weights):
    sum_ = 0
    for n in range(len(weights)):
        sum_ += inputs[n - 1]*weights[n - 1]
    return sum_
        
def activate(sum_):
    if sum_ > 0:
        return 1
    else:
        return -1

def feedforward(data, weights):
       outputs = []
    for n in range(20):
        inputs = [data[0, n], data[1, n]]
        outputs.append(activate(sum_(inputs, weights)))
    return outputs

def train(data, weights):
    inputs = [data[0], data[1]]
    desired = [data[2]]
    guess = feedforward(data, weights)
    error = []
    for n1 in range(len(desired[0])): 
        error.append(desired[0][n1] - guess[n1])
        for n2 in range(len(weights)):
            weights[n2] += 0.05 * error[n1] * data[n2][n1]
    print(weights)

    
train(data, weights)


[ 115.12331914  122.72456718  238.28024688]

In [70]:
data = create_training_data(20, func)
weights = np.random.rand(3)*2 - 1

In [71]:
for n in range(10):
    train(data, weights)


[  55.91042366   45.81805698  102.54488393]
[ 107.0732306    89.63029984  197.51993373]
[ 158.23603754  133.4425427   292.49498352]
[ 209.39884448  177.25478555  387.47003332]
[ 260.56165142  221.06702841  482.44508312]
[ 311.72445836  264.87927127  577.42013292]
[ 362.8872653   308.69151413  672.39518272]
[ 414.05007224  352.50375699  767.37023252]
[ 465.21287918  396.31599985  862.34528232]
[ 516.37568612  440.12824271  957.32033212]

In [ ]:


In [ ]: