# esn = ESN(2, 1, 500, echo_param=0.85, regulariser=1e-6) esn = EsnModel(2, 1, 100) # esn = EsnModel(2, 1, 1000, # spectral_scale=1.0, echo_param=0.85, # input_weight_scale=1.0, regulariser=1e-5) esn.train(X_train, y_train) hm = np.zeros((100, 100)) n, m = hm.shape for i in range(n): print("iteration %d" % (i+1)) for j in range(m): save = esn.layers[0].W_res[i, j] esn.layers[0].W_res[i, j] = 0 esn_outputs = esn.generate(X_valid, len(y_valid)) error = nrmse(y_valid, esn_outputs, data_mean) hm[i, j] = error esn.layers[0].W_res[i, j] = save del esn_outputs # esn_outputs = [] # generate test-data # esn_outputs = esn.generate(X_valid, len(y_valid)) # n_esn_outputs.append(esn_outputs) # error = nrmse(y_valid, esn_outputs, data_mean) # print('ESN NRMSE: %f' % error) # for i in range(len(y_valid)): # y_valid_slice = y_valid[:i]
esn_outputs = [] # esn.layers[0].drop_probability = 0.0 # generate test-data #esn_outputs = esn.generate(X_valid, len(y_valid)) #error_first = nrmse(y_valid, esn_outputs, data_mean) #print('ESN NRMSE: %f' % error_first) gen_data = np.vstack((X_train[-warm_up_length:], X_valid)) esn_outputs = esn.generate( gen_data, len(y_valid), warmup_timesteps=warm_up_length) #, reset_increment=3) #esn_outputs = esn.generate(gen_data, len(y_valid), warmup_timesteps=warm_up_length) n_esn_outputs.append(esn_outputs) error = nrmse(y_valid, esn_outputs, data_mean) print('ESN NRMSE: %f' % error) #assert np.round(error, 3) == np.round(error_first, 3), "errors after warm-up and generation must be the same" for i in range(len(y_valid)): y_valid_slice = y_valid[:i] esn_outputs_slice = esn_outputs[:i] err = nrmse(y_valid_slice, esn_outputs_slice, data_mean) t_nrmse[n, i] = err _nrmse[n, r] = error print("--ERR. MEAN: {}+-{}".format(np.mean(_nrmse, 1), np.std(_nrmse, 1)))
X_valid = np.hstack( (np.array(data[split - 1:-1]), np.ones_like(data[split - 1:-1, :1]))) y_valid = np.array(data[split:]) ''' Train the ESN. ''' esn = models.EsnModel(input_size=2, output_size=1, reservoir_size=1000) esn.train(X_train, y_train, warmup_timesteps=300) ''' Evaluate the ESN. ''' # generate test-data starting from the next data point. esn_outputs = esn.generate(X_valid, len(y_valid)) error_gen = nrmse(y_valid, esn_outputs, DATA_MEAN) print('ESN NRMSE VALID 1: %f' % error_gen) # generate test data from earlier data requires using a warmup of 300 # so that our reservoir state is in synch with the predicted data point. warmup = 300 gen_data = np.vstack((X_train[-warmup:], X_valid)) esn_outputs = esn.generate(gen_data, len(y_valid), warmup_timesteps=warmup) error_pre_gen = nrmse(y_valid, esn_outputs, DATA_MEAN) print('ESN NRMSE VALID 2: %f' % error_pre_gen) # notice how both methods of training produce the same predictions. Try changing # the 'warmup' to a low value like zero and see if they are still the same. assert np.round(error_gen, 3) == np.round( error_pre_gen,