Esempio n. 1
0
     return perturbRnn.loss( perturbRnn.feedforward(trainData.x)[0], trainData.y )
 
def Et(W):
     pass #TODO
 
with Timer('bptt'):
    dx, dh, dy = rnn.backprop_thru_time_chain(trainData.x, trainData.y)

with Timer('bptt double loop'):
    dx2_t, dh2_t, dy2_t = rnn.backprop_thru_time_double_loop(trainData.x, trainData.y)
    dx2 = sum(dx2_t)/T
    dh2 = sum(dh2_t)/T
    dy2 = sum(dy2_t)/T
    
with Timer('lagrange'):
    dxl, dhl, dyl = rnn.backprop_thru_time_lagrange(trainData.x, trainData.y)

with Timer ('lagrange loop'):
    dxll, dhll, dyll = rnn.backprop_thru_time_lagrange_loop(trainData.x, trainData.y)

with Timer('numerical'):
    dn = numerical_gradient(E, weights_to_vector(*rnn.get_weights()), 1e-6)
    dxn, dhn, dyn = vector_to_weights( dn, rnn.Nx, rnn.Nh, rnn.Ny )

#with Timer('double loop numerical'): #TODO: numerically test to check that each dE(t)/dW is correct
#    dn = numerical_gradient(E, weights_to_vector(*rnn.get_weights()), 1e-6)
#    dxn, dhn, dyn = vector_to_weights( dn, rnn.Nx, rnn.Nh, rnn.Ny )
#    dxn2_t, dhn2_t, dyn2_t = numerical_gradient(Et, weights_to_vector(*rnn.get_weights()), 1e-6)
#    dxn2 = sum(dxn2_t)/T
#    dhn2 = sum(dhn2_t)/T
#    dyn2 = sum(dyn2_t)/T