import numpy as np from numpy.random import randn N,D_in,H,D_out=64,1000,100,10 x,y=randn(N,D_in),randn(N,D_out) w1,w2=randn(D_in,H),randn(H,D_out) for t in range(2000): h=1/(1+np.exp(-x.dot(w1))) y_pred=h.dot(w2) loss=np.square(y_pred-y).sum() print(t,loss) grad_y_pred=2.0*(y_pred-y) grad_w2=h.T.dot(grad_y_pred) grad_h=grad_y_pred.dot(w2.T) grad_w1=x.T.dot(grad_h*h*(1-h)) w1-=1e-4*grad_w1 w2-=1e-4*grad_w2 class Neuron: # ... def neuron_tick(inputs): """ assume inputs and weights are 1-D numpy arrays and bias is a number""" cell_body_sum=np.sum(inputs*self.weights)+self.bias firing_rate=1.0/(1.0+math.exp(-cell_body_sum)) return firing_rate # forward-pass of a 3-layer neural network: f=lambda x:1.0/(1.0+np.exp(-x)) x=np.random.randn(3,1) h1=f(np.dot(W1,x)+b1) h2=f(np.dot(W2,h1)+b2) out=np.dot(W3,h2)+b3