Ejemplo n.º 1
0
def test_esn():

    # check default parameters
    params = torsk.default_params()

    # check model
    lag_len = 3
    model = NumpyESN(params)
    inputs = np.random.uniform(size=[lag_len] + params.input_shape)
    labels = np.random.uniform(size=[lag_len] + params.input_shape)
    state = np.random.uniform(size=[model.esn_cell.hidden_size])

    # test _forward_states_only
    outputs, states = model.forward(inputs, state, states_only=False)
    assert outputs.shape == (lag_len,) + tuple(params.input_shape)
    assert states.shape == (lag_len, model.esn_cell.hidden_size)

    # test train
    wout = model.wout.copy()
    model.optimize(inputs=inputs, states=states, labels=labels)
    assert not np.any(wout == model.wout)

    # test _forward
    outputs, states = model.predict(inputs[-1], state, nr_predictions=2)
    assert states.shape == (2, model.esn_cell.hidden_size)
    assert outputs.shape == (2,) + tuple(params.input_shape)
Ejemplo n.º 2
0
def model_forward(dtype_str, reservoir):
    params = torsk.default_params()
    params.dtype = dtype_str
    params.reservoir_representation = reservoir
    params.input_map_specs = [
        {"type": "conv", "size": [5, 5], "kernel_type": "gauss", "input_scale": 2, "mode": "same"},
    ]
    params.backend = "numpy"
    model = NumpyESN(params)
    print(model.esn_cell.hidden_size)

    inputs = np.ones([3] + params.input_shape, dtype=dtype_str)
    state = np.zeros([model.esn_cell.hidden_size], dtype=dtype_str)

    outputs, states = model.forward(inputs, state, states_only=False)
    return outputs, states
Ejemplo n.º 3
0
def test_run_1dmackey():
    bh.random.seed(0)

    params = torsk.default_params()
    params.input_map_specs = [{
        "type": "random_weights",
        "size": [1000],
        "input_scale": 1.
    }]
    params.spectral_radius = 1.5
    params.density = 0.05
    params.input_shape = [1, 1]
    params.train_length = 2200
    params.pred_length = 400
    params.transient_length = 200
    params.dtype = "float64"
    params.reservoir_representation = "dense"
    params.backend = "numpy"
    params.train_method = "pinv_svd"
    params.tikhonov_beta = 2.0
    params.debug = False
    params.imed_loss = False

    logger = logging.getLogger(__name__)
    level = "DEBUG" if params.debug else "INFO"
    logging.basicConfig(level=level)
    logging.getLogger("matplotlib").setLevel("INFO")

    model = ESN(params)

    mackey = mackey_sequence(N=3700)
    mackey = normalize(mackey) * 2 - 1
    mackey = mackey[:, bh.newaxis, bh.newaxis]
    dataset = ImageDataset(mackey, params, scale_images=False)

    model, outputs, pred_labels = torsk.train_predict_esn(model, dataset)

    # import matplotlib.pyplot as plt
    # plt.plot(bh.squeeze(outputs))
    # plt.plot(bh.squeeze(pred_labels))
    # plt.show()

    error = bh.abs(outputs - pred_labels)
    logger.info(error.mean())
    logger.info(error.max())
    assert error.mean() < 0.2
    assert error.max() < 1.1
Ejemplo n.º 4
0
def test_lissajous(tmpdir):
    np.random.seed(0)

    params = torsk.default_params()
    params.input_map_specs = [{
        "type": "pixels",
        "size": [30, 30],
        "input_scale": 3.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [5, 5],
        "kernel_type": "gauss",
        "input_scale": 4.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [10, 10],
        "kernel_type": "gauss",
        "input_scale": 3.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [15, 15],
        "kernel_type": "gauss",
        "input_scale": 4.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [5, 5],
        "kernel_type": "random",
        "input_scale": 4.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [10, 10],
        "kernel_type": "random",
        "input_scale": 4.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [20, 20],
        "kernel_type": "random",
        "input_scale": 4.
    }, {
        "type": "dct",
        "size": [15, 15],
        "input_scale": 1.
    }, {
        "type": "gradient",
        "input_scale": 4.
    }, {
        "type": "gradient",
        "input_scale": 4.
    }]

    params.spectral_radius = 2.0
    params.density = 0.001
    params.input_shape = [30, 30]
    params.train_length = 1200
    params.pred_length = 300
    params.transient_length = 200
    params.dtype = "float64"
    params.reservoir_representation = "sparse"
    params.backend = "numpy"
    params.train_method = "pinv_svd"
    params.imed_loss = False
    params.tikhonov_beta = None
    params.debug = False

    logger = logging.getLogger(__name__)
    level = "DEBUG" if params.debug else "INFO"
    logging.basicConfig(level=level)
    logging.getLogger("matplotlib").setLevel("INFO")

    logger.info("Creating circle dataset ...")
    t = np.arange(0, 200 * np.pi, 0.02 * np.pi)
    x, y = np.sin(0.3 * t), np.cos(t)

    center = np.array([y, x]).T
    images = gauss2d_sequence(center, sigma=0.5, size=params.input_shape)
    dataset = ImageDataset(images, params, scale_images=True)

    logger.info("Building model ...")
    model = ESN(params)

    logger.info("Training + predicting ...")
    model, outputs, pred_labels = torsk.train_predict_esn(model, dataset)

    # logger.info("Visualizing results ...")
    # import matplotlib.pyplot as plt
    # from torsk.visualize import animate_double_imshow
    # anim = animate_double_imshow(pred_labels, outputs)
    # plt.show()

    error = np.abs(outputs - pred_labels)
    logger.info(error.mean())
    logger.info(error.max())
    assert error.mean() < 3e-4
    assert error.max() < 9e-3
Ejemplo n.º 5
0
def test_kuro():
    np.random.seed(0)

    params = torsk.default_params()
    params.input_map_specs = [{
        "type": "pixels",
        "size": [30, 30],
        "input_scale": 3.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [5, 5],
        "kernel_type": "gauss",
        "input_scale": 2.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [10, 10],
        "kernel_type": "gauss",
        "input_scale": 1.5
    }, {
        "type": "conv",
        "mode": "same",
        "size": [15, 15],
        "kernel_type": "gauss",
        "input_scale": 1.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [5, 5],
        "kernel_type": "random",
        "input_scale": 1.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [10, 10],
        "kernel_type": "random",
        "input_scale": 1.
    }, {
        "type": "conv",
        "mode": "same",
        "size": [20, 20],
        "kernel_type": "random",
        "input_scale": 1.
    }, {
        "type": "dct",
        "size": [15, 15],
        "input_scale": 1.
    }, {
        "type": "gradient",
        "input_scale": 1.
    }, {
        "type": "gradient",
        "input_scale": 1.
    }]

    params.spectral_radius = 1.5
    params.density = 0.01
    params.input_shape = [30, 30]
    params.train_length = 12 * 73
    params.pred_length = 73
    params.transient_length = 3 * 73
    params.dtype = "float64"
    params.reservoir_representation = "sparse"
    params.backend = "numpy"
    params.train_method = "pinv_lstsq"
    params.tikhonov_beta = 3e1
    params.debug = False
    params.imed_loss = True
    params.imed_sigma = 1.0

    logger = logging.getLogger(__name__)
    level = "DEBUG" if params.debug else "INFO"
    logging.basicConfig(level=level)
    logging.getLogger("matplotlib").setLevel("INFO")

    images = np.load(pathlib.Path(__file__).parent / "kuro_test_sequence.npy")
    dataset = ImageDataset(images, params, scale_images=True)

    logger.info("Building model ...")
    model = ESN(params)

    logger.info("Training + predicting ...")
    model, outputs, pred_labels = torsk.train_predict_esn(model, dataset)

    # logger.info("Visualizing results ...")
    # import matplotlib.pyplot as plt
    # from torsk.visualize import animate_double_imshow
    # anim = animate_double_imshow(pred_labels, outputs)
    # plt.show()

    error = np.abs(outputs - pred_labels)
    logger.info(error.mean())
    logger.info(error.max())
    assert error.mean() < 0.2
    assert error.max() < 1.3