Example #1
0
def get_smallest_eig_nohess(coords, system, **kwargs):
    """find the smallest eigenvalue and eigenvector without a hessian
    
    this is just a wrapper for findLowestEigenVector
    
    See Also
    --------
    pele.transition_states.findLowestEigenVector
    """
    from pele.transition_states import findLowestEigenVector
    ret = findLowestEigenVector(coords, system.get_potential(), orthogZeroEigs=system.get_orthogonalize_to_zero_eigenvectors(), **kwargs)
    return ret.eigenval, ret.eigenvec
Example #2
0
def test_eigs():
    from pele.transition_states import findLowestEigenVector
    from pele.thermodynamics import normalmodes
    system = HeisenbergSystem(field_disorder=3.1, disorder=True)
    pot = system.get_potential()
    x = system.get_random_configuration()
    x = system.get_random_minimized_configuration().coords
    ret = findLowestEigenVector(x, pot, orthogZeroEigs=None)
    hess = pot.getHessian(x)
    freq, modes = normalmodes(hess, metric=None)
    print("lowest eig from hess", freq[0])
    print("lowest eig from RR  ", ret.eigenval)
def test_eigs():
    from pele.transition_states import findLowestEigenVector
    from pele.thermodynamics import normalmodes
    system = HeisenbergSystem(field_disorder=3.1, disorder=True)
    pot = system.get_potential()
    x = system.get_random_configuration()
    x = system.get_random_minimized_configuration().coords
    ret = findLowestEigenVector(x, pot, orthogZeroEigs=None)
    hess = pot.getHessian(x)
    freq, modes = normalmodes(hess, metric=None)
    print "lowest eig from hess", freq[0]
    print "lowest eig from RR  ", ret.eigenval
Example #4
0
def get_smallest_eig_nohess(coords, system, **kwargs):
    """find the smallest eigenvalue and eigenvector without a hessian
    
    this is just a wrapper for findLowestEigenVector
    
    See Also
    --------
    pele.transition_states.findLowestEigenVector
    """
    from pele.transition_states import findLowestEigenVector

    ret = findLowestEigenVector(
        coords,
        system.get_potential(),
        orthogZeroEigs=system.get_orthogonalize_to_zero_eigenvectors(),
        **kwargs)
    return ret.eigenval, ret.eigenvec
def main():
    np.random.seed(42)

    def minimize(pot, coords):
        print "shape", coords.shape
        print "start energy", pot.getEnergy(coords)
        results = lbfgs_cpp(coords, pot, M=4, nsteps=1e5, tol=1e-5, iprint=1, verbosity=1, maxstep=10)
        print "quenched energy", results.energy
        print "E: {}, nsteps: {}".format(results.energy, results.nfev)
        if results.success:
            # return [results.coords, results.energy, results.nfev]
            return results

    def init_weights(shape):
        return np.random.normal(0, scale=0.01, size=shape).flatten()

    dtype = 'float64'
    device = 'gpu'

    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
    bs = 1000
    trX, trY, teX, teY = mnist.train.images[:bs], mnist.train.labels[:bs], mnist.test.images, mnist.test.labels

    # like in linear regression, we need a shared variable weight matrix for logistic regression
    hnodes = 10 #625
    w_h = init_weights([784, hnodes])
    w_o = init_weights([hnodes, 10])
    w = np.append(w_h, w_o)
    b_h = np.ones(hnodes)*0.1
    b_o = np.ones(10)*0.1
    b = np.append(b_h, b_o)
    weights = np.append(w, b)
    potTF = DoubleLogisticRegressionPotential(trX, trY, hnodes, reg=0.1, dtype=dtype, device=device)

    e, grad = potTF.getEnergyGradient(weights)
    print 'e:{0:.15f}, norm(g):{0:.15f}'.format(e, np.linalg.norm(grad))

    results = minimize(potTF, weights)
    # print potTF.test_model(np.array(results.coords), teX, teY)

    from pele.transition_states import findLowestEigenVector, analyticalLowestEigenvalue
    res = findLowestEigenVector(np.array(results.coords), potTF, orthogZeroEigs=None, iprint=1, tol=1e-6)
    print res.H0
    print analyticalLowestEigenvalue(np.array(results.coords), potTF)