예제 #1
0
        # 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]
예제 #2
0
            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)))
예제 #3
0
    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,