Пример #1
0
def test_weights():
    input_dimensions = 4
    number_of_nodes = 9
    model = LinearAssociator(input_dimensions=input_dimensions,
                             number_of_nodes=number_of_nodes,
                             transfer_function="Hard_limit")
    weights = model.get_weights()
    assert weights.ndim == 2 and \
           weights.shape[0] == number_of_nodes and \
           weights.shape[1] == (input_dimensions)
    model.set_weights(np.ones((number_of_nodes, input_dimensions)))
    weights = model.get_weights()
    assert weights.ndim == 2 and \
           weights.shape[0] == number_of_nodes and \
           weights.shape[1] == (input_dimensions)
    assert np.array_equal(model.get_weights(),
                          np.ones((number_of_nodes, input_dimensions)))
    model.initialize_weights(seed=3)
    weights = np.array([[1.78862847, 0.43650985, 0.09649747, -1.8634927],
                        [-0.2773882, -0.35475898, -0.08274148, -0.62700068],
                        [-0.04381817, -0.47721803, -1.31386475, 0.88462238],
                        [0.88131804, 1.70957306, 0.05003364, -0.40467741],
                        [-0.54535995, -1.54647732, 0.98236743, -1.10106763],
                        [-1.18504653, -0.2056499, 1.48614836, 0.23671627],
                        [-1.02378514, -0.7129932, 0.62524497, -0.16051336],
                        [-0.76883635, -0.23003072, 0.74505627, 1.97611078],
                        [-1.24412333, -0.62641691, -0.80376609, -2.41908317]])
    np.testing.assert_array_almost_equal(model.get_weights(),
                                         weights,
                                         decimal=3)
Пример #2
0
def test_predict_hard_limit():
    input_dimensions = 2
    number_of_nodes = 5
    model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes,
                    transfer_function="Hard_limit")
    model.initialize_weights(seed=1)
    X_train = np.array([[-1.43815556, 0.10089809, -1.25432937, 1.48410426],
                        [-1.81784194, 0.42935033, -1.2806198, 0.06527391]])
    y = np.array([[0, 0, 0, 1], [1, 0, 1, 0], [1, 0, 1, 1], [0, 0, 0, 1], [0, 0, 0, 1]])

    y_hat = model.predict(X_train)
    np.testing.assert_array_almost_equal(y_hat, y, decimal=4)
Пример #3
0
def test_predict_linear():
    input_dimensions = 2
    number_of_nodes = 5
    model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes,
                    transfer_function="Linear")
    model.initialize_weights(seed=1)
    X_train = np.array([[-1.43815556, 0.10089809, -1.25432937, 1.48410426],
                        [-1.81784194, 0.42935033, -1.2806198, 0.06527391]])
    y = np.array([[-1.22398485, -0.09876447, -1.25403672,  2.37076614],
       [ 2.7100805 , -0.51397095,  2.0365662 , -0.8538988 ],
       [ 2.93924278, -0.90084842,  1.86188982,  1.13412472],
       [-1.12555691, -0.15077626, -1.21375201,  2.53979562],
       [-0.00551192, -0.07487682, -0.08083147,  0.4572099 ]])

    y_hat = model.predict(X_train)
    np.testing.assert_array_almost_equal(y_hat, y, decimal=4)
def test_calculate_mean_squared_error():
    input_dimensions = 5
    number_of_nodes = 5
    number_of_samples = 18
    model = LinearAssociator(input_dimensions=input_dimensions,
                             number_of_nodes=number_of_nodes,
                             transfer_function="Linear")
    model.initialize_weights(seed=1)
    X_train = np.random.randn(input_dimensions, number_of_samples)
    #assert model.calculate_mean_squared_error(X_train,model.predict(X_train)) == 0
    target = np.random.randn(number_of_nodes, number_of_samples)
    mse = model.calculate_mean_squared_error(X_train, target)
    np.testing.assert_array_almost_equal(mse, 3.7144714504979635, decimal=4)

    model = LinearAssociator(input_dimensions=input_dimensions,
                             number_of_nodes=number_of_nodes,
                             transfer_function="Hard_limit")
    model.initialize_weights(seed=1)
    X_train = np.random.randn(input_dimensions, number_of_samples)
    #assert model.calculate_mean_squared_error(X_train,model.predict(X_train)) == 0
    target = np.random.randn(number_of_nodes, number_of_samples)
    mse = model.calculate_mean_squared_error(X_train, target)
    np.testing.assert_array_almost_equal(mse, 1.1234558948088766, decimal=4)
Пример #5
0
def test_train_linear_delta():
    input_dimensions = 5
    number_of_nodes = 5
    for i in range(10):
        model = LinearAssociator(input_dimensions=input_dimensions,
                                 number_of_nodes=number_of_nodes,
                                 transfer_function="Linear")
        model.initialize_weights(seed=i + 1)
        X_train = np.random.randn(input_dimensions, 100)
        out = model.predict(X_train)

        model.set_weights(np.random.randn(*model.get_weights().shape))

        model.train(X_train,
                    out,
                    batch_size=10,
                    num_epochs=50,
                    alpha=0.1,
                    gamma=0.1,
                    learning="delta")
        new_out = model.predict(X_train)

        np.testing.assert_array_almost_equal(out, new_out, decimal=4)
Пример #6
0
def test_pseudo_inverse_fit():
    input_dimensions = 5
    number_of_nodes = 5
    model = LinearAssociator(input_dimensions=input_dimensions,
                             number_of_nodes=number_of_nodes,
                             transfer_function="Linear")
    model.initialize_weights(seed=1)
    X_train = np.random.randn(input_dimensions, 10)
    out = model.predict(X_train)

    model.set_weights(np.zeros_like(model.get_weights()))
    model.fit_pseudo_inverse(X_train, out)
    new_out = model.predict(X_train)
    np.testing.assert_array_almost_equal(out, new_out, decimal=4)