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]:
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))
In [ ]: