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 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
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)