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)