Esempio n. 1
0
rnn = RNN(1,50,1,10)
T = 400
f = 0.05
trainData = Data(x = make_data('rect', T, f, 0.1),
                 y = make_data('sin', T, [f, 2*f, 3*f]))

def E(W):
     Wx,Wh,Wy=vector_to_weights(W, 1,50,1)
     perturbRnn = RNN(Wx,Wh,Wy, rnn.tau)
     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)