Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def compute_grads_num(X, Y, P, Ws, bs, lamda, h):
- """ Converted from matlab code, borrowed from given code """
- #no = Ws.shape[0]
- #d = X.shape[0]
- grads_W = []
- grads_b= []
- for i in range(len(Ws)):
- grads_W.append( np.zeros(Ws[i].shape) )
- grads_b.append( np.zeros(bs[i].shape) )
- #grad_W = np.zeros(Ws.shape);
- #grad_b = np.zeros(bs.shape);
- c = compute_cost(X, Y, Ws, bs, lamda)
- #print('\n\nCheckinig dimensions in compute grads num:\nb grads ({},{})\nW grads ({},{})'.format(len(bs),[x.shape for x in bs],len(Ws),[x.shape for x in Ws]))
- print('Starting numerical computation of gradient')
- for layer_index in range(len(bs)):
- print('b layer {}'.format(layer_index))
- for i in range(len(bs[layer_index])):
- print(' cell {}/{}'.format(i,len(bs[layer_index])))
- b_try = np.array(bs,copy=True)
- b_try[layer_index][i] += h
- c2 = compute_cost(X, Y, Ws, b_try, lamda)
- grads_b[layer_index][i] = np.sum(c2-c) / h
- print('numerical gradient of b calculated, starting W')
- for layer_index in range(len(Ws)):
- print('W layer {}'.format(layer_index))
- for i in range(Ws[layer_index].shape[0]):
- for j in range(Ws[layer_index].shape[1]):
- print(' {},{} of {}, {}'.format(i,j,Ws[layer_index].shape[0],Ws[layer_index].shape[1]))
- W_try = np.array(Ws,copy=True)
- W_try[layer_index][i,j] += h
- c2 = compute_cost(X, Y, W_try, bs, lamda)
- grads_W[layer_index][i,j] = np.sum(c2-c) / h
- return [grads_W, grads_b]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement