Exemplo n.º 1
0
def test_graph_diamond():
    npr.seed(2)

    N  = 10
    D  = 5
    H1 = 6
    H2 = 7

    X   = kayak.Inputs(npr.randn(N,D))
    W1  = kayak.Parameter(npr.randn(D,H1))
    W2a = kayak.Parameter(npr.randn(H1,H2))
    W2b = kayak.Parameter(npr.randn(H1,H2))
    W3  = kayak.Parameter(npr.randn(H2,1))

    U1 = kayak.SoftReLU(kayak.MatMult(X, W1))
    U2a = kayak.SoftReLU(kayak.MatMult(U1, W2a))
    U2b = kayak.SoftReLU(kayak.MatMult(U1, W2b))
    U3a = kayak.SoftReLU(kayak.MatMult(U2a, W3))
    U3b = kayak.SoftReLU(kayak.MatMult(U2b, W3))
    
    out = kayak.MatSum(kayak.MatAdd(U3a, U3b))

    out.value
    print kayak.util.checkgrad(W1, out)
    print kayak.util.checkgrad(W2a, out)
    print kayak.util.checkgrad(W2b, out)
    print kayak.util.checkgrad(W3, out)
    assert kayak.util.checkgrad(W1, out) < MAX_GRAD_DIFF
    assert kayak.util.checkgrad(W2a, out) < MAX_GRAD_DIFF
    assert kayak.util.checkgrad(W2b, out) < MAX_GRAD_DIFF
    assert kayak.util.checkgrad(W3, out) < MAX_GRAD_DIFF
Exemplo n.º 2
0
def test_softrelu_values():
    npr.seed(1)

    for ii in xrange(NUM_TRIALS):
        np_X = npr.randn(6, 5)
        X = kayak.Parameter(np_X)
        Y = kayak.SoftReLU(X)

        assert np.all(Y.value >= 0.0)
        assert np.all(close_float(np.log(1.0 + np.exp(np_X)), Y.value))
Exemplo n.º 3
0
def test_softrelu_grad():
    npr.seed(2)

    for ii in xrange(NUM_TRIALS):
        np_X = npr.randn(6, 5)
        X = kayak.Parameter(np_X)
        Y = kayak.SoftReLU(X)
        Z = kayak.MatSum(Y)

        Z.value
        assert np.all(Z.grad(X) >= 0.0)
        assert kayak.util.checkgrad(X, Z) < MAX_GRAD_DIFF
Exemplo n.º 4
0
def test_graph_chain():
    npr.seed(1)

    N  = 10
    D  = 5
    H1 = 6
    H2 = 7

    X  = kayak.Inputs(npr.randn(N,D))
    W1 = kayak.Parameter(npr.randn(D,H1))
    W2 = kayak.Parameter(npr.randn(H1,H2))
    W3 = kayak.Parameter(npr.randn(H2,1))

    U1 = kayak.SoftReLU(kayak.MatMult(X, W1))
    U2 = kayak.SoftReLU(kayak.MatMult(U1, W2))
    U3 = kayak.SoftReLU(kayak.MatMult(U2, W3))
    
    out = kayak.MatSum(U3)

    out.value
    assert kayak.util.checkgrad(W1, out) < MAX_GRAD_DIFF
    assert kayak.util.checkgrad(W2, out) < MAX_GRAD_DIFF
    assert kayak.util.checkgrad(W3, out) < MAX_GRAD_DIFF
Exemplo n.º 5
0
def test_graph_dag():
    npr.seed(3)

    num_layers = 7
    num_dims   = 5
    
    for ii in xrange(NUM_TRIALS):
        probs = npr.rand()

        X = kayak.Inputs(npr.randn(25,num_dims))

        wts    = []
        layers = []
        for jj in xrange(num_layers):

            U = kayak.Constant(np.zeros((25,num_dims)))

            if npr.rand() < probs:
                W = kayak.Parameter(0.1*npr.randn(num_dims, num_dims))
                wts.append(W)
                U = kayak.MatAdd( U, kayak.SoftReLU(kayak.MatMult(X, W)) )

            for kk in xrange(jj):
                if npr.rand() < probs:
                    W = kayak.Parameter(0.1*npr.randn(num_dims, num_dims))
                    wts.append(W)
                    U = kayak.MatAdd( U, kayak.SoftReLU(kayak.MatMult(layers[kk], W)) )
            
            layers.append(U)
            
        out = kayak.MatSum(layers[-1])

        out.value
        for jj, wt in enumerate(wts):
            diff = kayak.util.checkgrad(wt, out, 1e-4)
            print diff
            assert diff < 1e-4
Exemplo n.º 6
0
def test_cache_utility():
    npr.seed(3)

    num_layers = 17
    num_dims   = 3
    
    X = kayak.Inputs(npr.randn(10, num_dims))
    W1 = kayak.Parameter(npr.randn(num_dims, num_dims))
    W2 = kayak.Parameter(npr.randn(num_dims, num_dims))

    Z = kayak.MatMult(X, W1)

    for jj in xrange(num_layers):
        Z = kayak.SoftReLU(kayak.MatAdd(kayak.MatMult(Z, W2),
                                        kayak.MatMult(Z, W2)))

    out = kayak.MatSum(Z)
    assert kayak.util.checkgrad(W1, out) < 1e-4
Exemplo n.º 7
0
def test_matmult_grad_3():
    npr.seed(5)

    for ii in xrange(NUM_TRIALS):

        np_A = npr.randn(5, 6)
        np_B = npr.randn(6, 7)
        np_C = npr.randn(7, 8)
        A = kayak.Parameter(np_A)
        B = kayak.Parameter(np_B)
        C = kayak.Parameter(np_C)
        D = kayak.MatMult(A, B, C)
        E = kayak.MatSum(kayak.SoftReLU(D))

        assert E.grad(A).shape == (5, 6)
        assert E.grad(B).shape == (6, 7)
        assert E.grad(C).shape == (7, 8)
        assert kayak.util.checkgrad(A, E) < MAX_GRAD_DIFF
        assert kayak.util.checkgrad(B, E) < MAX_GRAD_DIFF
        assert kayak.util.checkgrad(C, E) < MAX_GRAD_DIFF