In [2]:
%matplotlib inline
import numpy as np
from matplotlib import pyplot as plt

In [3]:
x =[]
y=[]

for i in range(30):
    x.append([5+np.random.rand(),5+np.random.rand(),1])
    y.append([0,1])
for i in range(30):
    x.append([-5+np.random.rand(),-5+np.random.rand(),1])
    y.append([1,0])
x=np.array(x)
y=np.array(y)

In [4]:
plt.plot( x[:,0], x[:,1], 'o')


Out[4]:
[<matplotlib.lines.Line2D at 0x7f8dec9e00d0>]

In [5]:
def g(x):    
    return 1/(1+np.exp(-x))

def grad_g(g):
        return (1-g)*g

In [14]:
np.random.seed(1)
wb1 = np.random.random((3,2)) - 1
wb2 = np.random.random((2,1)) - 1

In [16]:
for i in range(1000):
    #start forward
    z0=np.dot(x,wb1)
    a1=g(z0)
    
    z1=np.dot(a1,wb2)
    a2=g(z1)
    #end forward
    
    #start backward
    d_a2 = y - a2
    d_z1 = d_a2 * grad_g(a2)
    wb1 += error * np.dot(a1.T,d_z1)
    
    d_a1 = np.dot(d_z1,wb1.T)
    d_z0 = d_a1 * grad_g(a1)
    wb0 = np.dot(a0.T,d_z0[:,:-1])
    #end backward
    if(i % 1000) == 0:   # Only print the error every 10000 steps
        E=0.5*np.sum(np.square(d_a2))
        print("Error: {}".format(E))


----------------------------------------------------------------------
ValueError                           Traceback (most recent call last)
<ipython-input-16-0bbb1f55bd61> in <module>()
     11     d_a2 = y - a2
     12     d_z1 = d_a2 * grad_g(a2)
---> 13     wb1 += error * np.dot(a1.T,d_z1)
     14 
     15     d_a1 = np.dot(d_z1,wb1.T)

ValueError: operands could not be broadcast together with shapes (3,2) (2,2) (3,2) 

In [ ]: