コード例 #1
0
def test_kruskal_to_tensor_with_weights():
    A = tl.reshape(tl.arange(1, 5), (2, 2))
    B = tl.reshape(tl.arange(5, 9), (2, 2))
    weights = tl.tensor([2, -1])

    out = kruskal_to_tensor([A, B], weights=weights)
    expected = tl.tensor([[-2, -2], [6, 10]])  # computed by hand
    tl.assert_array_equal(out, expected)
コード例 #2
0
def test_kruskal_to_vec():
    """Test for kruskal_to_vec"""
    U1 = np.reshape(np.arange(1, 10), (3, 3))
    U2 = np.reshape(np.arange(10, 22), (4, 3))
    U3 = np.reshape(np.arange(22, 28), (2, 3))
    U4 = np.reshape(np.arange(28, 34), (2, 3))
    U = [tl.tensor(t) for t in [U1, U2, U3, U4]]
    full_tensor = kruskal_to_tensor(U)
    true_res = tensor_to_vec(full_tensor)
    res = kruskal_to_vec(U)
    tl.assert_array_equal(
        true_res,
        res,
        err_msg='khatri_rao product converted incorrectly to vec.')
コード例 #3
0
def test_kruskal_to_unfolded():
    """Test for kruskal_to_unfolded.
        !!Assumes that kruskal_to_tensor and unfold are properly tested and work!!
    """
    U1 = np.reshape(np.arange(1, 10), (3, 3))
    U2 = np.reshape(np.arange(10, 22), (4, 3))
    U3 = np.reshape(np.arange(22, 28), (2, 3))
    U4 = np.reshape(np.arange(28, 34), (2, 3))
    U = [tl.tensor(t) for t in [U1, U2, U3, U4]]
    full_tensor = kruskal_to_tensor(U)
    for mode in range(4):
        true_res = unfold(full_tensor, mode)
        res = kruskal_to_unfolded(U, mode)
        tl.assert_array_equal(
            true_res,
            res,
            err_msg='khatri_rao product unfolded incorrectly for mode {}.'.
            format(mode))
コード例 #4
0
def test_kruskal_to_tensor():
    """Test for kruskal_to_tensor."""
    U1 = np.reshape(np.arange(1, 10), (3, 3))
    U2 = np.reshape(np.arange(10, 22), (4, 3))
    U3 = np.reshape(np.arange(22, 28), (2, 3))
    U4 = np.reshape(np.arange(28, 34), (2, 3))
    U = [tl.tensor(t) for t in [U1, U2, U3, U4]]
    true_res = tl.tensor([[[[46754., 51524.], [52748., 58130.]],
                           [[59084., 65114.], [66662., 73466.]],
                           [[71414., 78704.], [80576., 88802.]],
                           [[83744., 92294.], [94490., 104138.]]],
                          [[[113165., 124784.], [127790., 140912.]],
                           [[143522., 158264.], [162080., 178730.]],
                           [[173879., 191744.], [196370., 216548.]],
                           [[204236., 225224.], [230660., 254366.]]],
                          [[[179576., 198044.], [202832., 223694.]],
                           [[227960., 251414.], [257498., 283994.]],
                           [[276344., 304784.], [312164., 344294.]],
                           [[324728., 358154.], [366830., 404594.]]]])
    res = kruskal_to_tensor(U)
    tl.assert_array_equal(
        res,
        true_res,
        err_msg='Khatri-rao incorrectly transformed into full tensor.')

    columns = 4
    rows = [3, 4, 2]
    matrices = [
        tl.tensor(np.arange(k * columns).reshape((k, columns))) for k in rows
    ]
    tensor = kruskal_to_tensor(matrices)
    for i in range(len(rows)):
        unfolded = unfold(tensor, mode=i)
        U_i = matrices.pop(i)
        reconstructed = tl.dot(U_i, tl.transpose(khatri_rao(matrices)))
        tl.assert_array_almost_equal(reconstructed, unfolded)
        matrices.insert(i, U_i)